一个奇怪的问题~~~~

enic 2008-05-27 06:30:56
环境XP SP2 ;VC6.0 SP6

#include <stdio.h>
int main(void)
{
int i = 0;

printf("%d %d %d %d %d",i , i++, i, ++i, i);

return 0;
}
运行结果:
1 1 1 1 0

我的问题是i++没有执行吗?预期结果应该是2 2 1 1 0

在线等

...全文
109 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
enic 2008-05-28
  • 打赏
  • 举报
回复
经过C/C++茶馆 帮助,得出结论
杜绝使用这样的语句
N个编译器,N个不同结果!!!!
enic 2008-05-28
  • 打赏
  • 举报
回复
为什么要等printf 完了才执行呢?


前面说过了,不是应为语句的原因。难道是函数吗?
貌似其他函数里边也结果是不同的。
蘑菇摸骨 2008-05-27
  • 打赏
  • 举报
回复
我知道了~!!
printf函数的参数是从右到左的

i++ 是要等到printf函数执行完 才会执行的~ 所以嘿嘿
答案当然就是
1 1 1 1 0
嘿嘿 这个问题居然被我想到了~
嗯结贴也没关系
就是想告诉你一声
顺便和大家分享
蘑菇摸骨 2008-05-27
  • 打赏
  • 举报
回复
嗯 真的 很神奇! LZ怎么会想到这样写?
enic 2008-05-27
  • 打赏
  • 举报
回复
恩就这样吧
独孤过儿 2008-05-27
  • 打赏
  • 举报
回复
靠,无聊不啊?

标准中明确建议,不要这样写代码,可还是...
enic 2008-05-27
  • 打赏
  • 举报
回复
8楼说的有问题,如果说++是以语句为标志执行那么
int i =0;
printf("%d",i\n),i++,printf("%d\n",i);
应该是
0
0

但是测试结果
0
1
enic 2008-05-27
  • 打赏
  • 举报
回复
那为什么这里不是2呢?
参数从右至左,就相当于语句吧?
先i++然后i
i为什么不是2
enic 2008-05-27
  • 打赏
  • 举报
回复
我自己找到原因了```

是printf 函数的

"pintf 函数要截取打印值时,她可能先计算最后一个参数的值,从而再计算其他参数之前的``"__c primer plus

也就是说,printf 的不确定性吧?
以后尽量减少在不是自己定义的函数中使用自加,自减。
zjw6861982 2008-05-27
  • 打赏
  • 举报
回复
本来就是这个结果
printf("%d %d %d %d %d",i , i++, i, ++i, i);
参数从右至左
i++在执行完本语句之后加1;
如果你在后面加一句
printf("%d ",i );
输出2
enic 2008-05-27
  • 打赏
  • 举报
回复
在我机器上运行结果是1 1 1 1 0
crocke 2008-05-27
  • 打赏
  • 举报
回复
怪哉!
zhulinjia 2008-05-27
  • 打赏
  • 举报
回复
结果本来就是2 2 1 1 0
jintianfree 2008-05-27
  • 打赏
  • 举报
回复
up

不懂帮顶
enic 2008-05-27
  • 打赏
  • 举报
回复
它就是1
enic 2008-05-27
  • 打赏
  • 举报
回复
郁闷
andy_cai 2008-05-27
  • 打赏
  • 举报
回复
printf执行后i肯定是2

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧