Tho*_*hom 8 c loops for-loop continue while-loop
如果我continue在while循环中使用它,为什么它会进入无限循环,但在for循环中工作正常?如果我之后使用它,
循环计数器增量i++会在while循环中被忽略continue,但如果它在for循环中则可以工作.
如果continue忽略后续语句,那么为什么不忽略for循环的第三个语句,它包含计数器增量i++?不是的第三条语句for循环随后到continue也应该被忽略,给出的第三个语句for执行循环后的循环体?
while(i<10) //causes infinite loop
{
...
continue
i++
...
}
for(i=0;i<10;i++) //works fine and exits after 10 iterations
{
...
continue
...
}
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 24
因为continue回到循环的开始.使用后for,后操作i++是循环控制的一个组成部分,并在循环体重新启动之前执行.
有了while,这i++只是循环体中的另一个陈述(与类似的东西没什么不同a = b),如果你continue在到达它之前就跳过了.
jxh*_*jxh 10
原因是因为continue语句会使循环体中跟随它的语句短路.由于您编写while循环的方式在语句后面有增量continue语句,因此它会被短路.您可以通过更改while循环来解决此问题.
很多教科书声称:
for (i = 0; i < N; ++i) {
/*...*/
}
Run Code Online (Sandbox Code Playgroud)
相当于:
i = 0;
while (i < N) {
/*...*/
++i;
}
Run Code Online (Sandbox Code Playgroud)
但是,实际上,它真的像:
j = 0;
while ((i = j++) < N) {
/*...*/
}
Run Code Online (Sandbox Code Playgroud)
或者,更迂腐:
i = 0;
if (i < 10) do {
/*...*/
} while (++i, (i < 10));
Run Code Online (Sandbox Code Playgroud)
这些更相同,因为现在如果while有一个主体continue,增量仍然会发生,就像在a中一样for.后一替代方案仅在迭代完成后执行增量,就像for(前者在迭代之前执行增量,延迟将其保存i到迭代之后).
| 归档时间: |
|
| 查看次数: |
15192 次 |
| 最近记录: |