当前位置: 代码迷 >> C语言 >> 简单的小问题,涉及到使用printf输出表列中的求值顺序问题
  详细解决方案

简单的小问题,涉及到使用printf输出表列中的求值顺序问题

热度:148   发布时间:2006-01-26 11:51:00.0
简单的小问题,涉及到使用printf输出表列中的求值顺序问题

main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}
运行结果为
7
6
8
7
-8
822

这是怎么回事啊,一点也不符啊
不论是从左到右还是从右到左都不对啊

搜索更多相关的解决方案: printf  求值  顺序  输出  

----------------解决方案--------------------------------------------------------

我想的话,你一定是i++,++i,--i,i--没有分清楚啊
这种结果是正常的,因为在执行是从右到左,首先看
大概的跟你说一下
++i,是先自加之后,然后再输出i的值,同样--i也是一样的
i++,是先输出i的值,然后再自加,或自减,
因为执行顺序是从右到左
所以第一次执行的是-i--,结果为-8
然后执行i++,此时i的值为7
.....,而你最后一个值为822,这个结果我也不知道是为什么,
但是你有没有注意到你参数表差一个参数项


----------------解决方案--------------------------------------------------------
汗,你输出了6个%d,而只有5个i。
----------------解决方案--------------------------------------------------------
是这样的啊
我想问你想得到怎样的结果呢?
我也用的win-tc
----------------解决方案--------------------------------------------------------

main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
getch();
}
修改后如上
编译通过,可是结果和预计的不同
预计结果:
-8
7
8
6
7
可是运行结果是
7
6
8
7
-8偶晕了啊


----------------解决方案--------------------------------------------------------
heihei偶知道错了,输出时是正常的左->右顺序呵呵

zhangjuan了呵呵
----------------解决方案--------------------------------------------------------

这个根本就不是你们说的那个结果,无论你是用VC还是用WIN-TC编译都是一样的结果。
main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}
8
7
8
8
-8
-1第六个就数就随机了

这里应该这么分析,在printf里执行的顺序是从右到左,而在这里边执行的应该是类似于++i,在执行完printf后在执行里边的类似于i++的语句
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
这里是先算-i=8
i++不算这时候i=8
i--也不算这时候i=8
--i=7这时候i值变了
++i=8这时候i值变了,是在前边的7的基础上加的1得来的。
假如你现在在后边再加上一句printf("%d\n",i);
你就会看到,输出的是7而不是8;
这是因为最后的++i 是使i为8了,
这时候就要执行上面的-i--了这时候执行的是i--不是-i--所以是7,
再执行i++得到i=8了
再执行i--得到i=7
这就是为什么不是8而是7了


一定要注意

printf输出是从左到右,而计算的时候是从右到左的。

给你们纠正个错误。希望大家回去好好的体会一下,不要想当然的得出结论了,搞技术的前辈给你们提点意见

[此贴子已经被作者于2006-11-29 10:35:36编辑过]


----------------解决方案--------------------------------------------------------
我觉得你该谢三楼的
----------------解决方案--------------------------------------------------------
想问哈7楼的
-i为什么等于8而不是-8啊?????
不明白
----------------解决方案--------------------------------------------------------
明白了!
才发现 c里面的运算感觉好麻烦
----------------解决方案--------------------------------------------------------
  相关解决方案