В чем проблема с заключением скобок ("(") в код printf - PullRequest
3 голосов
/ 29 мая 2019

Я только начал C-программирование и у меня есть вопрос по следующему коду.

#include <stdio.h>

int main(void)
{
    int num1, num2, num3;
    int result;

        printf("(num1 - num2) x (num2 + num3) x (num3 % num1) \n");
    printf("Insert 3 numbers: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    result = (num1 - num2) * (num2 + num3) * (num3 % num1);
    printf("Answer: %d ", result);
    return 0;
}

Ошибка возникает, когда я помещаю следующую единственную строку кода:

  printf("(num1 - num2) x (num2 + num3) x (num3 % num1) \n");

Причина, по которой я это вставил, заключалась в том, что я хотел напечатать это уравнение, но всякий раз, когда я его вставляю, возникает ошибка. Кажется, что в сообщении об ошибке говорится, что есть проблема в использовании скобок, но я этого не делаю понять, почему ставить скобки становится проблемой.

Я ожидаю, что результат будет,

  (num1 - num2) x (num2 + num3) x (num3 % num1)
  Insert 3 numbers: 

Но возникает следующая ошибка:

«Ошибка отладки»

...

Выражение: "(" спецификатор формата 'n' отключен ", ')

1 Ответ

9 голосов
/ 29 мая 2019

Речь идет не о скобках, а о %.Для строки формата printf() символ % имеет специальное значение.

С C11, глава §7.21.6.1

[...] Формат составляетсяиз нуля или более директив: обычные многобайтовые символы (не%) , которые копируются без изменений в выходной поток; и спецификации преобразования, , каждая из которых приводит к извлечению нуля или более последующих аргументов, преобразованию их, если применимо, согласно соответствующему спецификатору преобразования, и затем записи результата в выходной поток.

и

Каждая спецификация преобразования вводится символом %.[...]

Итак, чтобы напечатать сам символ %, вам нужно указать еще один % в качестве спецификатора преобразования.Из списка спецификаторов преобразования (пункт 8 в той же спецификации) пишется

% A %.Ни один аргумент не преобразуется.Полная спецификация преобразования должна быть %%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...