当前位置: 技术问答>linux和unix
C编程的疑惑,望大虾解答
来源: 互联网 发布时间:2015-12-31
本文导语: 看下面的程序, #include int main() { printf("%d",5.01); printf("%f",5); return 0; } 请写出结果。 答案第一个应该是一个大数,第二个应该是0.000000 实际上我在linux下编译了一下,发觉第一个是一个大数 1889785610 第二...
看下面的程序,
#include
int main()
{
printf("%d",5.01);
printf("%f",5);
return 0;
}
请写出结果。
答案第一个应该是一个大数,第二个应该是0.000000
实际上我在linux下编译了一下,发觉第一个是一个大数 1889785610 第二个是5.009998
我很疑惑,于是我将程序改了一下,改为
#include
int main()
{
printf("%f",5);
printf("%d",5.01);
return 0;
}
答案却变成了-1.992393和1889785610
于是我再把程序改为
#include
int main()
{
printf("%f",5);
printf("%d",5.0);
return 0;
}
输出的结果却变成了-1.992393 和 0
再改成
#include
int main()
{
printf("%d",5.0);
printf("%f",5);
return 0;
}
输出的结果为0和5.000000
大家看看,这是为什么?
#include
int main()
{
printf("%d",5.01);
printf("%f",5);
return 0;
}
请写出结果。
答案第一个应该是一个大数,第二个应该是0.000000
实际上我在linux下编译了一下,发觉第一个是一个大数 1889785610 第二个是5.009998
我很疑惑,于是我将程序改了一下,改为
#include
int main()
{
printf("%f",5);
printf("%d",5.01);
return 0;
}
答案却变成了-1.992393和1889785610
于是我再把程序改为
#include
int main()
{
printf("%f",5);
printf("%d",5.0);
return 0;
}
输出的结果却变成了-1.992393 和 0
再改成
#include
int main()
{
printf("%d",5.0);
printf("%f",5);
return 0;
}
输出的结果为0和5.000000
大家看看,这是为什么?
|
内存地址的说法,好像有点风马牛了。
我觉得问题还是出在变量的自动类型转换上,楼主的printf中,没有一个是不用自动转换的。%f是单精度的,而5.0这样的常数却是双精度的,%d对应的常数要自动转换就更不用说了。
记得学C的时候就的提到过,自动类型转换是不安全的。是不建议的。
所以,楼主是否强制转换一下看看效果,如果还是老样子的话,就大家一起来研究吧。
我觉得问题还是出在变量的自动类型转换上,楼主的printf中,没有一个是不用自动转换的。%f是单精度的,而5.0这样的常数却是双精度的,%d对应的常数要自动转换就更不用说了。
记得学C的时候就的提到过,自动类型转换是不安全的。是不建议的。
所以,楼主是否强制转换一下看看效果,如果还是老样子的话,就大家一起来研究吧。