想知道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必须至少做到这一点)
发布于 2011-05-24 01:43:19
在for循环中,continue运行for语句的第三个表达式(通常用作某种迭代),然后运行条件(第二个表达式),如果条件为真,则运行循环。它不会运行循环当前迭代的其余部分。
在while (或do-while)循环中,它只运行条件,如果条件成立,则运行循环。它也不会运行循环当前迭代的其余部分。
发布于 2011-05-24 01:45:51
您将continue语句定义为“跳转到下一次迭代”是正确的。这将强制程序通过首先重新计算条件表达式来开始下一次迭代。
代码段的问题在于,它们在一次迭代后全部退出,因为您的条件表达式设置为false或count ==0。这将总是在一次迭代后返回false。
此外,将continue语句放在循环的末尾是没有意义的。无论哪种情况,它都将重新计算条件表达式。
发布于 2011-05-24 01:54:39
最好将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()循环也有类似的僵硬现象。
https://stackoverflow.com/questions/6100799
复制相似问题