想知道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必须至少得到正确的权利))
答案 0 :(得分:5)
在for循环中,continue运行for语句的第3个表达式(通常用作某种迭代),然后运行条件(第二个表达式),然后运行条件为true的循环。它不会运行循环的当前迭代的其余部分。
在while(或do-while)循环中,它只运行条件,然后在条件成立时循环。它也不会运行循环的当前迭代的其余部分。
答案 1 :(得分:1)
您将continue
语句定义为“跳转到下一次迭代”是正确的。这将迫使程序通过首先重新评估条件表达式来开始下一次迭代。
您的代码段的问题在于,它们都会在一次迭代后退出,因为您的条件表达式设置为false
或count ==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
}