首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“继续”语句忽略'while‘循环中的循环计数器增量,而不是'for’循环中的循环计数器增量?

为什么“继续”语句忽略'while‘循环中的循环计数器增量,而不是'for’循环中的循环计数器增量?
EN

Stack Overflow用户
提问于 2013-05-16 22:02:24
回答 8查看 21.9K关注 0票数 11

如果我在continue循环中使用while,而在for循环中工作得很好,为什么它会进入无限循环呢?

循环计数器增量i++while循环中被忽略,如果我在continue之后使用它,但是如果它在for循环中会工作。

如果continue忽略后续语句,那么为什么它不忽略for循环的第三条语句,该语句包含计数器增量i++?如果for循环的第三条语句是在循环主体之后执行的,那么for循环的第三条语句不是也是在continue之后执行的并且应该被忽略吗?

代码语言:javascript
复制
while(i<10)   //causes infinite loop
{
    ...
    continue
    i++
    ...
}

for(i=0;i<10;i++)  //works fine and exits after 10 iterations
{
    ...
    continue
    ...
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-05-16 22:06:16

因为continue回到循环的开头。使用for,后操作i++是循环控制的一个组成部分,并在循环体重新启动之前执行。

对于whilei++只是循环主体中的另一条语句(与a = b没有什么不同),如果您在到达continue之前跳过了它。

票数 28
EN

Stack Overflow用户

发布于 2013-05-16 22:26:15

原因是因为continue语句会在循环体中短路它后面的语句。因为您编写while循环的方式在continue语句之后有一个增量语句,所以它会短路。您可以通过更改while循环来解决这个问题。

许多教科书声称:

代码语言:javascript
复制
for (i = 0; i < N; ++i) {
    /*...*/
}

相当于:

代码语言:javascript
复制
i = 0;
while (i < N) {
    /*...*/
    ++i;
}

但是,在现实中,这真的就像:

代码语言:javascript
复制
j = 0;
while ((i = j++) < N) {
    /*...*/
}

或者,更迂腐一点:

代码语言:javascript
复制
i = 0;
if (i < 10) do {
    /*...*/
} while (++i, (i < 10));

这些更等价,因为现在如果while的主体有一个continue,增量仍然会发生,就像在for中一样。后一种选择只在迭代完成后执行增量,就像for一样(前者在迭代之前执行增量,将增量保存在i中直到迭代之后)。

票数 11
EN

Stack Overflow用户

发布于 2013-05-16 22:05:05

您的i增量是在“继续”之后,因此它永远不会执行。

代码语言:javascript
复制
while(i<10)   //causes infinite loop
{
.........
continue
i++
......
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16598222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档