在 C++ 中,我们可以使用 continue 语句来退出 “本次” 循环,也就是跳过当前这一轮循环体中剩余的代码,直接进入下一轮循环。
continue 在英文中是 “继续” 的意思。它和前面学过的 break 语句不同:break 会把整个本层循环彻底停下来,而 continue 只是跳过当前这一趟,后面的循环轮次还会照常执行。
C++ continue 基本使用
当程序在循环体内执行到 continue; 时,当前这一轮循环中位于 continue; 后面的剩余代码会被直接跳过,程序立即进入下一轮循环。
语法:
continue;说明:
continue 语句只能用于 for、while 和 do...while 这 3 种循环语句中,不能用于其他地方。它通常配合 if 条件判断一起使用,用来过滤掉不需要处理的数据。下面我们来看看它在 3 种循环中的具体用法。
示例 1:在 for 循环中跳过偶数
#include <iostream>
int main() {
for (int i = 1; i <= 6; i++) {
// 遇到偶数则跳过本次循环
if (i % 2 == 0) {
continue;
}
std::cout << i << '\n';
}
return 0;
}运行结果如下。
1
3
5分析:
i % 2 == 0 用来判断 i 是否为偶数。在 for 循环中,当 i 取偶数 2、4、6 时,条件成立并执行 continue;,程序会直接跳过下方的输出语句,跳到小括号末尾执行 i++ 进入下一轮。因此最终打印出来的全都是奇数 1、3、5。
示例 2:在 while 循环中跳过指定数字
#include <iostream>
int main() {
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue;
}
std::cout << i << '\n';
}
return 0;
}运行结果如下。
1
2
4
5分析:
在这个例子中,变量 i 的初值设为 0,每次进入循环后先执行 i++,因此 i 在 5 轮循环里会依次变为 1、2、3、4、5。当 i 等于 3 时,程序执行 continue; 跳过下方的输出语句,直接回到 while (i < 5) 判断下一轮条件,最终输出了除 3 以外的数字。
这里有一个初学者很容易踩坑的细节:在 for 循环中执行 continue; 时,程序会自动跳去执行小括号末尾的 i++。但在 while 循环中,更新语句 i++ 写在循环体内部,我们必须把 i++ 放在 continue 之前,这也是上面把 i 的初值设为 0、进入循环后先加 1 的原因。
如果把 i++ 放在 continue 后面,一旦遇到 continue,连 i++ 也会被一起跳过,导致变量 i 永远停留在 3 而变成死循环:
// 正确方式
int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue;
}
std::cout << i << '\n';
}
// 错误方式
int i = 1;
while (i <= 5) {
if (i == 3) {
continue;
}
std::cout << i << '\n';
i++;
}示例 3:在 do...while 循环中使用 continue
#include <iostream>
int main() {
int n = 0;
do {
n += 10;
if (n == 20) {
continue;
}
std::cout << n << '\n';
} while (n < 40);
return 0;
}运行结果如下。
10
30
40分析:
n += 10; 表示每一轮让 n 增加 10。在 do...while 循环中,当第二轮 n 变为 20 时,执行 continue; 会跳过下方的输出语句,直接跳到底部的 while (n < 40) 判断条件。由于 20 < 40 成立,程序继续回到 do 进入下一轮,最终输出 10、30、40。
和 while 循环一样,这里的更新语句 n += 10; 同样需要放在 continue 之前,否则跳过更新语句后也会陷入死循环。
continue 与 break 的区别
初学的小伙伴很容易把 continue 和 break 搞混。其实大家只需要记住一句话:continue 退出的是 “本次” 循环,只跳过当前这一轮;而 break 退出的是 “本层” 循环,会直接结束整个循环。
我们把它们放在完全相同的 for 循环中对比一下,运行结果的区别就一目了然了。
示例 4:对比 continue 与 break
#include <iostream>
int main() {
std::cout << "使用 continue:";
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
std::cout << i << ' ';
}
std::cout << '\n';
std::cout << "使用 break:";
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}运行结果如下。
使用 continue:1 2 4 5
使用 break:1 2分析:
从运行结果可以看出,当 i 等于 3 时,第一个循环里的 continue 只是跳过了 3 这一轮的输出,后面的 4 和 5 依然正常打印。而第二个循环里的 break 则是直接终止了整个 for 循环,因此只打印出了 1 和 2。
此外,如果是在多层嵌套循环中,continue 的作用范围也和 break 类似:它默认只跳过包裹它的最近一层循环的当前这一轮,不会直接影响外层循环。
注意 break 语句既可以用于循环语句,也可以用于 switch 语句;而 continue 语句只能用于循环语句中,不能单独用于 switch 语句。如果在独立的 switch 分支里写 continue;,编译时就会直接报错。
