继续发言

时间:2011-05-23 17:38:44

标签: language-agnostic loops

想知道continue语句在do...while(false)循环中做了什么,我模拟了一个简单的测试用例(伪代码):

count = 0;
do {
    output(count);
    count++;
    if (count < 10)
        continue;
}while (false);

output('out of loop');

令我惊讶的是输出结果:

0
out of loop

有点困惑,我将循环从do...while更改为for

for (count = 0; count == 0; count++) {
    output(count);
    if (count < 10)
        continue;
}
output('out of loop');

虽然在功能上不一样,但目的实际上是相同的:使条件仅满足第一次迭代,并且在下一次迭代中继续(直到达到某个值,纯粹用于停止可能的无限循环。)它们可能不会运行相同的次数,但这里的功能并不重要。

输出与以前相同:

0
out of loop

现在,加入一个简单的while循环:

count = 0;
while (count == 0) {
    output(count);
    count++;
    if (count < 10)
        continue;
}
output('out of loop');

再次,相同的输出。

这有点令人困惑,因为我一直认为continue语句是“跳转到下一次迭代”。所以,我在这里问:continue语句在每个循环中做了什么?它是否只是跳到了这个状态?

((对于它的价值,我在JavaScript中测试了上述内容,但我相信它与语言无关... js必须至少得到正确的权利))

4 个答案:

答案 0 :(得分:5)

在for循环中,continue运行for语句的第3个表达式(通常用作某种迭代),然后运行条件(第二个表达式),然后运行条件为true的循环。它不会运行循环的当前迭代的其余部分。

在while(或do-while)循环中,它只运行条件,然后在条件成立时循环。它也不会运行循环的当前迭代的其余部分。

答案 1 :(得分:1)

您将continue语句定义为“跳转到下一次迭代”是正确的。这将迫使程序通过首先重新评估条件表达式来开始下一次迭代。

您的代码段的问题在于,它们都会在一次迭代后退出,因为您的条件表达式设置为falsecount ==0。一次迭代后,这将始终返回false。

此外,在循环结束时放置continue语句是没有意义的。在任何一种情况下,它都将重新评估条件表达式。

答案 2 :(得分:1)

最好将continue视为跳到封闭循环的末尾。这可能会带来麻烦:

#include <iostream>
using namespace std;

int main() {

    int n = 0;

    do {
        cout << n << endl;
        n += 1;
        if ( n == 3 ) {
            continue;
        }
        cout << "n was not 3" << endl;
    } while( n != 3 );

}

打印:

0
n was not 3
1
n was not 3
2

并终止,因为continue会在循环结束时跳转到while()。 for()和while()循环发生类似的僵硬。

答案 3 :(得分:0)

continue在循环中使用时会跳到下一次迭代。 break退出当前块。通常,break用于退出循环,但它可用于退出任何块。

for (int i = 0; i < 1000; i++) {
  if (some_condition) {
    continue; // would skip to the next iteration
  }

  if (some_other_condition) {
    break; // Exits the loop (block)
  }

  // other work
}