带你学C带你飞第15课 课后练习问题
带你学C带你飞第15课课后练习第4题,题目是:请写出每行代码执行后,result的值。
double result = 1.0;
result += 2.6;
result ++;
result * 5;
result = (int)(result + 0.5)
写了如下的代码进行验证
#include <stdio.h>
int main()
{
double result = 1.0;
printf ("result0=%f\n",result);
result += 2.6;
printf ("result1=%f\n",result);
result ++;
printf ("result2=%f\n",result);
result = result * 5;
printf ("result3=%f\n",result);
result = (int)(result + 0.5);
printf ("result4=%i\n",result);
return 0;
}
问题是,上面代码执行后,result4的值一直不对,每次运行都有不同的结果,请高手指点!
result = (int)(result + 0.5);
printf ("result4=%i\n",result);
%i 什么情况?
还没有注意过这个问题···
刚才调试了一下,结果跟楼主的不一样:总是输出0 (无论VC还是CodeBlocks)
简单解析:result操作之后,依然是23.0000 然后输出的时候,参数入栈是按照double型压入,所以为8字节,然而%i只取4个字节,所以··· 按照double的编码和内存中的存储方式,就是0了
卤煮这种问题应该可以自己调试出来,如果调试不熟悉,参考:http://bbs.fishc.com/thread-71753-1-1.html
以上绝对没有广告嫌疑i!{:10_256:} n0noper 发表于 2016-5-14 09:48
还没有注意过这个问题···
刚才调试了一下,结果跟楼主的不一样:总是输出0 (无论VC还是CodeBlocks)
...
谢谢版主耐心解答,马上试试!! 人造人 发表于 2016-5-13 18:49
result = (int)(result + 0.5);
printf ("result4=%i\n",result);
%i和%d一样都是占位符,整型数据用这个占位符与%d一样的效果。 mooney2001 发表于 2016-5-14 11:14
%i和%d一样都是占位符,整型数据用这个占位符与%d一样的效果。
#include <stdio.h>
int main()
{
double result = 1.0;
printf ("result0=%f\n",result);
result += 2.6;
printf ("result1=%f\n",result);
result ++;
printf ("result2=%f\n",result);
result = result * 5;
printf ("result3=%f\n",result);
result = (int)(result + 0.5);
printf ("result4=%i\n",result);
return 0;
}
最后一个输出为什么用 %i 人造人 发表于 2016-5-14 18:38
#include
int main()
前面是double型数据,要用%f占位符,最后一个已经是整型数据了呀,要用%i或%d占位符。 mooney2001 发表于 2016-5-15 08:00
前面是double型数据,要用%f占位符,最后一个已经是整型数据了呀,要用%i或%d占位符。
result = (int)(result + 0.5);
(int)(result + 0.5);
的确转换成了整型
但是result 是 double 类型
你把转换后的整型又赋值给 result
result 的类型是double
不会变,你改变的只是 result = (int)(result + 0.5);
红色的那部分 mooney2001 发表于 2016-5-15 08:00
前面是double型数据,要用%f占位符,最后一个已经是整型数据了呀,要用%i或%d占位符。
当然你可以这样
result = (int)(result + 0.5);
printf ("result4=%i\n", (int)result);
不过这好像没有意义
页:
[1]