首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

边看书边测试,又有了不解

2012-10-19 
边看书边测试,又有了疑惑C/C++ code#includestdio.hmain(){int n 5int m -5float f 5.6878fpri

边看书边测试,又有了疑惑

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
[解决办法]
探讨

引用:

这个是因为printf函数的解析是从后面开始的,所以输出同一个参数时,如果第一个参数发生错误 后面的就会不对 但是如果第一个参数是对的 后面的是错的 就不会影响前面的 这具体输出跟编译器有关系 就好像
printf("%d %d",++m,++m) 在不同的编译器上结果就不一样


额。。。。。 这样啊, 感觉是个很严重的问题

热点排行