[原创][讨论]关于输出怪题:有值变无值………之新问题?(ok)
以下内容引用一朋友的问题: 各位高手,本人有一道c语言的题目向大家请教: main() {double d; float f; long l; int i; i=f=l=d=20/3; printf("%d %d %f %f\n",i,l,f,d); } 本人经过调试,答案是6 6 0.000000 0.000000 我不是那么明白f和d为什么是0.000000,而i和l确有值.? 谢谢!!
有朋友指出错误在于 printf("%d %d %f %f\n",i,l,f,d); 应改为printf("%d %ld %f %f\n",i,l,f,d); 不错,改正后完全正确!
我现在的问题是:为什么 %ld 会影响后面的 %f %f 呢? 我将他输出顺序改一下 printf("%d %f %f %d\n",i,f,d,l); 输出为什么也是对的? 麻烦各位给看一下,谢谢! 谢谢各位的帮助!
[此贴子已经被作者于2005-3-28 20:20:29编辑过]
搜索更多相关的解决方案:
输出
----------------解决方案--------------------------------------------------------
我用的VC,不存在什么错误。。。。。。
----------------解决方案--------------------------------------------------------
沉下去了,顶上来。
各位帮帮忙啊?
----------------解决方案--------------------------------------------------------
其实只是那些无聊的考试才要研究这些无聊的问题,你的 格式输错就肯定有问题啦!!
----------------解决方案--------------------------------------------------------
版主,我不同意你哦!
我只想知道 “为什么 %ld 会影响后面的 %f %f 的原因”,
输出顺序改一下 printf("%d %f %f %d\n",i,f,d,l); 输出为什么也是对的?
----------------解决方案--------------------------------------------------------
%1d 和%d当然,有不一样的地方了呀,楼猪一点是基础没有上好呀,这样的问题,很少会有人提出来来了呀,沉了就沉了吧,没有什么关系的呀,建义去看看,
printf语句!!!!!!
----------------解决方案--------------------------------------------------------
我觉的这些问题不要深究,因为C 里面有很多类似问题要彻底搞清,恐怕不是菜鸟的能力所及,因为这涉及很多深层次问题.
我的意思不是说不能打破砂锅问到底,而是在目前的水平上可以把这种问题放一放.类似问题还有:
main(){float x=1.2,k;
k=100+x;printf("%f",k);}结果是101.9997
----------------解决方案--------------------------------------------------------
楼主的问题要说清楚不是一句两句就能说清楚的,执行printf("%d %d %f %f\n",i,l,f,d);时,printf依次将d,f,l,i压贱,再根据格式控制符依次取出i,l,f,d, i 是没问题,格式正确,l 是 long型是压入时是32bit的,但因控制符错误,当成int型16bit取出,所以造成这个结果,可以改成printf("%d %d %d %f %f\n",i,l,f,d);多加一个%d即再取16bit数据,这样即可正确显示,而浮点型数据机制与整数又不一样了。7楼的问题也同样与浮点数据的存储机制有关,自己查查资料吧.
----------------解决方案--------------------------------------------------------
谢谢 knocker 版主的回答!至少我已知道printf不是简单的从内存中读取数据! 再次谢谢 knocker 版主,也谢谢其他热心的朋友!
----------------解决方案--------------------------------------------------------