将方括号(“(”)放入printf代码有什么问题?

时间:2019-05-29 06:17:58

标签: c printf

我刚刚开始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 个答案:

答案 0 :(得分:9)

这与括号无关,与%有关。对于printf()格式的字符串,%字符具有特殊含义。

摘自C11,第7.21.6.1章

  

[...]格式由零个或多个指令组成:普通多字节   字符(不是%),这些字符将原样复制到输出流中; 和转化   规范,每个规范都会导致获取零个或多个后续参数,   如果适用,则根据相应的转换说明符将其转换,以及   然后将结果写入输出流。

  

每个转换规范都由字符%引入。 [...]

因此,要打印一个%字符本身,您需要放置另一个%作为转换说明符。从转化说明符列表中,(相同规范中的第8段)

  

%写入一个%字符。没有参数被转换。完整的   转换规范应为%%