如果我在continue循环中使用while,而在for循环中工作得很好,为什么它会进入无限循环呢?
循环计数器增量i++在while循环中被忽略,如果我在continue之后使用它,但是如果它在for循环中会工作。
如果continue忽略后续语句,那么为什么它不忽略for循环的第三条语句,该语句包含计数器增量i++?如果for循环的第三条语句是在循环主体之后执行的,那么for循环的第三条语句不是也是在continue之后执行的并且应该被忽略吗?
while(i<10) //causes infinite loop
{
...
continue
i++
...
}
for(i=0;i<10;i++) //works fine and exits after 10 iterations
{
...
continue
...
}发布于 2013-05-16 22:06:16
因为continue回到循环的开头。使用for,后操作i++是循环控制的一个组成部分,并在循环体重新启动之前执行。
对于while,i++只是循环主体中的另一条语句(与a = b没有什么不同),如果您在到达continue之前跳过了它。
发布于 2013-05-16 22:26:15
原因是因为continue语句会在循环体中短路它后面的语句。因为您编写while循环的方式在continue语句之后有一个增量语句,所以它会短路。您可以通过更改while循环来解决这个问题。
许多教科书声称:
for (i = 0; i < N; ++i) {
/*...*/
}相当于:
i = 0;
while (i < N) {
/*...*/
++i;
}但是,在现实中,这真的就像:
j = 0;
while ((i = j++) < N) {
/*...*/
}或者,更迂腐一点:
i = 0;
if (i < 10) do {
/*...*/
} while (++i, (i < 10));这些更等价,因为现在如果while的主体有一个continue,增量仍然会发生,就像在for中一样。后一种选择只在迭代完成后执行增量,就像for一样(前者在迭代之前执行增量,将增量保存在i中直到迭代之后)。
发布于 2013-05-16 22:05:05
您的i增量是在“继续”之后,因此它永远不会执行。
while(i<10) //causes infinite loop
{
.........
continue
i++
......
}https://stackoverflow.com/questions/16598222
复制相似问题