我非常了解printf()和格式说明符的工作原理
注意: - 我正在使用Turbo c / c ++编译器,你知道gcc,g ++等更好但问题仍然相同
代码: -
void main()
{
clrscr();
printf("%d %d %d");
getch();
}
输出: - 0 344 0
现在,
代码: -
void main()
{
clrscr();
printf("%f %f %f");
getch();
}
输出: - printf:未链接的浮点格式 异常程序终止。
现在,还要注意我已经在大约200个系统上尝试过这个。
问题: - 我认为输出上显示的那些格式说明符号不是垃圾,因为每个系统都获得相同的结果,并且它们是printf()函数和格式说明符之间通过文件处理或指针。那么任何人现在终于可以告诉它可能是什么了吗?
注意:-result可能因IDE而异,但对于每个系统上的编译器都是一样的,因为我也在codeblocks IDE上尝试了这个。
答案 0 :(得分:4)
现在终于有人能说出它可能是什么了吗?
来自C11 Standard (draft) for the library function fprintf()
:
<强> 7.21.6.1/2 强>
[...]
如果格式的参数不足,则行为为 未定义。
代码调用未定义的行为可能发生任何。
答案 1 :(得分:0)
输出: - printf:浮点格式未链接异常程序终止。
除非在用户代码中检测到浮点代码,否则Turbo C和某些编译器不会在浮点支持中链接。 "%f %f %f"
需要FP支持才能工作,但编译器无法在 compile 时识别它。相反,程序在运行时失败。
添加FP代码并摆脱对printf()
;
#include <stdio.h>
#include <math.h>
int main() {
clrscr();
double a = sqrt(2.0):
printf("%f %f %f\n",a,a,a);
getch();
}