C格式错误的参数太多了

时间:2018-01-24 04:09:26

标签: c printf

void output(int number)
{
    int air_temp;
    int speed_of_sound;

    air_temp = main();

    speed_of_sound = 1086 * sqrt(((5.0 * air_temp) + 297.0) / 247.0);


    printf(" \nThe speed of sound at that temperature is %d", speed_of_sound, 
    "ft/sec.");

    return;
}

说我在第二个打印行中有太多关于格式的参数。我是编码新手,这让我陷入困境几个小时......

2 个答案:

答案 0 :(得分:1)

您对printf()的使用不正确。

你可能意味着

printf(" \nThe speed of sound at that temperature is %d %s", speed_of_sound, "ft/sec.");

或只是

printf(" \nThe speed of sound at that temperature is %d ft/sec", speed_of_sound);

printf()的原型就像

int printf( const char *format, ... );​

其中format是格式字符串,其余参数指定要打印的数据。

来自http://en.cppreference.com/w/c/

  

如果默认参数提升后的任何参数不是相应转换说明符所期望的类型,或者格式所需的参数少于此参数,则行为未定义。如果格式需要的参数多于所需的参数,则会评估并忽略无关的参数。

在使用printf()时,格式字符串中只有一个格式说明符(即%d),而您提供两个要打印的数据。第二项是字符串"ft/sec"。由于参数多于格式所需的参数,因此只会忽略额外参数。

但更严重的问题是您在main()中使用output()。 您尚未指定何时停止递归。致电output()后,它会一遍又一遍地调用main(),从而导致无限递归。

答案 1 :(得分:0)

您正在传递两个参数,但是在字符串格式中,它只需要一个参数来填充%d锚点。这就是你遇到这个错误的原因。

以下是使用printf的正确方法:

printf(" \nThe speed of sound at that temperature is %d ft/sec.", speed_of_sound);

其他例子是:

printf(" \nI want to print an integer %d, and a string %s using these two variables", value, string);

在第二种情况下,我们在同一printf中打印两个变量。