在 C 中,当我移动此 printf 行时:printf("%f\n", 5 / 2);
对于不同的线路,其输出会发生变化。有任何想法吗?
代码如下:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a = 65;
char c = (char)a;
int m = 3.0/2;
printf("%c\n", c);
printf("%f\n", (float)a);
printf("%f\n", 5.0 / 2);
printf("%f\n", 5 / 2.0);
printf("%f\n", (float)5 / 2);
printf("%f\n", 5 / (float)2);
printf("%f\n", (float)(5 / 2));
printf("%f\n", 5.0 / 2);
printf("%d\n", m);
printf("%f\n", 5 / 2);
system("PAUSE");
return(0);
}
这是输出:
A
65.000000
2.500000
2.500000
2.500000
2.500000
2.000000
2.500000
1
2.500000
如果我移动printf("%f\n", 5 / 2);
对于第一行之一(在输出 A 的行和输出 65.000000 的行之间),它将打印 0.000000(这是有道理的),而不是现在的 2.500000。
有任何想法吗?
您的代码正在调用未定义的行为。
您有义务使用正确的数据说明符来打印内容printf
,如果不这样做就会调用 UB。因此,在不同的地方得到不同的结果并不重要,也并不奇怪。
http://en.cppreference.com/w/c/io/fprintf http://en.cppreference.com/w/c/io/fprintf
如果转换规范无效,则行为未定义。
这同样适用于 c。
当调用未定义的行为时,结果根据定义是随机的且不可预测的,因此要求我们预测它们没有什么意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)