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;
}
说我在第二个打印行中有太多关于格式的参数。我是编码新手,这让我陷入困境几个小时......
答案 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
中打印两个变量。