边看书边测试,又有了疑惑
- C/C++ code
#include<stdio.h>main(){ int n = 5; int m = -5; float f = 5.6878f; printf(" %d %lf\n", ((n>0)?f:n),((n>0)?f:n)); printf(" %d %lf\n", ((m>0)?f:m),((m>0)?f:m)); printf(" %f %lf\n", ((n>0)?f:n),((n>0)?f:n)); printf(" %f %lf\n", ((m>0)?f:m),((m>0)?f:m)); }
前两行printf 和 后两行printf 输出结果为何有这么大的差异?
-1610612736 -0.000000
0 0.000000
5.687800 5.687800
-5.000000 -5.000000
[解决办法]
前两行
f,n两个类型不同,但条件表达式的结果是按float(类型提升)表示的,用%d输出float数据自然无法正确表示了
[解决办法]
前两行输出的第一个是用整形输出的,但是每次都是输出浮点数,所以和就成那样了
[解决办法]
查查“类型提升”
[解决办法]
这个是因为printf函数的解析是从后面开始的,所以输出同一个参数时,如果第一个参数发生错误 后面的就会不对 但是如果第一个参数是对的 后面的是错的 就不会影响前面的 这具体输出跟编译器有关系 就好像
printf("%d %d",++m,++m) 在不同的编译器上结果就不一样
[解决办法]
变量类型转换的常见问题,多看看这方面的资料就好了
[解决办法]
Alt+8
F11
[解决办法]