For的死循环(逗号表达式)

For的死循环(逗号表达式)

实例一
for(i=0 ,printf(“First=%d \n”,i );
i<10 ,printf(“Second=%d \n”,i );
i++ ,printf(“Third=%d\n”,i ))
{
printf(“Fourth=%d \n”,i);
}

在学习逗号表达式的时候,我看到了上面的一个例子,拿到编译环境进行调试的时候,发现竟然是一个死循环。我就纳闷了,这个不就是一个普通的死循环加上了输出语句,为何就变成了死循环呢?
运行结果如下:
在这里插入图片描述

为了避免错误,我把for循环中的输出语句全部删除,变成了下面的样子:
实例二:
for(i=0 ;
i<10 ;
i++ )
{
printf(“Fourth=%d \n”,i);
}

咦?这样就可以正常输出,为什么会这样呢?
我单步调试了实例一,发现当i>10之后,还是继续循环,这是为什么呢?
我仔细分析了for循环的结构,如下:
for(<初始化>;<条件表达式>;<增量>)
感觉 问题应该出现在条件表达式这块儿,因为只有在这个地方,才会判断有没有继续循环的必要。于是,我只是咋条件表达式的地方加上输出语句,如下:
实例三:
for(i=0 ;
i<10 ,printf(“First=%d \n”,i );
i++ )
{
printf(“Fourth=%d \n”,i);
}

发现这样就成了死循环,我突然意识到了上面的条件表达式是一个逗号表达式,而逗号表达式的最终结果是最后一个表达式的值,这也就是说是printf的返回值,暂且先不说printf的返回值,我先把输出语句放到了(i<10)前面,如下:
实例四:
for(i=0 ;
printf(“First=%d \n”,i ),i<10 ;
i++ )
{
printf(“Fourth=%d \n”,i);
}

发现输出结果正常。这么说的话,应该是printf的返回值的问题,我上网搜了一下,发现printf的返回值是输出的字符的个数,这样,问题也就清楚了,每次输出的时候,只要可以输出正常的话,printf的返回值都是>0的数,而大于0的数都是作为正的,所以,条件成立,这样,循环会继续进行,所以,就出现了上面的死循环了。
这么说的话,程序改成下面的样子就是对的了:
实例五:
for(i=0 ,printf("First=%d ",i );
printf("Second=%d ",i ),i<10 ;
i++ ,printf(“Third=%d\n”,i ))
{
printf("Fourth=%d ",i);
}

//output
运行结果
/*First=0 Second=0 Fourth=0 Third=1Second=1 Fourth=1 Third=2Second=2 Fourth=2 Third=3Second=3 Fourth=3 Third=4Second=4 Fourth=4 Third=5Second=5 Fourth=5 Third=6Second=6 Fourth=6 Third=7Second=7 Fourth=7 Third=8Second=8 Fourth=8 Third=9Second=9 Fourth=9 Third=10Second=10 Press any key to continue*/

转载自这个博客
点击打开

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值