c语言中的一道题 求程序的输出结果 为什么我求出来是1 2 2 呢?而答案是1 2 3 啊
main(){intn=0;while(n++<=1)printf("%d\t",n);printf("%d\n",n);}...
main ()
{
int n=0;
while(n++<=1)
printf("%d\t",n);
printf("%d\n",n);
} 展开
{
int n=0;
while(n++<=1)
printf("%d\t",n);
printf("%d\n",n);
} 展开
3个回答
展开全部
你的情况是:
while(n++<=1)中是先取n值判断后再n++,因此第一次n=0判断有效,n变为1并执行循环体;
第二次n=1判断仍有效,n变为2并执行循环体,第三次n=2判断无效,n++被忽略。
但实践中由于编译器的实现不同,可能导致第三次半段无效时n++未被忽略-理论上是不应该忽略的。所以给的答案是1 2 3。
所以问题可能出在你使用的编译器上。
我用TC2.0编译器、tcc编译器和cygwin下的gcc编译器执行结果均为:1 2 3。
不知道你用的什么编译器?
难怪。这主要是编译器的问题。 我用VC6.0测试了,如果Debug模式没有问题,Release模式有问题,只有1 2。 我估计是Release优化出错。所以查看了一下,如果以速度优化,则输出1 2。默认模式则跟Debug一样。最小尺寸优化也只输出两个。自定义优化跟默认模式一样。 所以问题出在编译器及Project设置上。
所以正确答案应是三个:1 2 3。
while(n++<=1)中是先取n值判断后再n++,因此第一次n=0判断有效,n变为1并执行循环体;
第二次n=1判断仍有效,n变为2并执行循环体,第三次n=2判断无效,n++被忽略。
但实践中由于编译器的实现不同,可能导致第三次半段无效时n++未被忽略-理论上是不应该忽略的。所以给的答案是1 2 3。
所以问题可能出在你使用的编译器上。
我用TC2.0编译器、tcc编译器和cygwin下的gcc编译器执行结果均为:1 2 3。
不知道你用的什么编译器?
难怪。这主要是编译器的问题。 我用VC6.0测试了,如果Debug模式没有问题,Release模式有问题,只有1 2。 我估计是Release优化出错。所以查看了一下,如果以速度优化,则输出1 2。默认模式则跟Debug一样。最小尺寸优化也只输出两个。自定义优化跟默认模式一样。 所以问题出在编译器及Project设置上。
所以正确答案应是三个:1 2 3。
展开全部
你忽略了最后一次,n = 2的时候,还是会计算n++ <= 1的,这个时候 因为n > 1,所以没有进循环(在括号处求的值),但是编译器还是对n++求了一次值,不然,怎么知道n++ 已经不符合条件了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当n=1时(第二次循环),1<=1满足,那么n加一,然后执行循环体
此时n=2,进入n++<=1中,由于2<=1不成立,应该跳出循环啦,但n还要加1的,因为n++<=1是一个语句。此时n=3了。
此时n=2,进入n++<=1中,由于2<=1不成立,应该跳出循环啦,但n还要加1的,因为n++<=1是一个语句。此时n=3了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询