3.4 break 与 continue
break 和 continue 都会改变循环的正常执行流程,但含义不同。
break:立刻结束当前循环。continue:跳过本轮剩余代码,直接进入下一轮。
break
当循环已经完成目标,或者继续执行已经没有意义时,可以使用 break。
下面的程序判断一个整数是否为素数。一旦发现某个数能整除 n,就可以确定 n 不是素数,不需要继续检查。
cpp
#include <iostream>
#include <cmath>
int main() {
int n;
std::cin >> n;
bool is_prime = n > 1;
for (int i = 2; i <= static_cast<int>(std::sqrt(n)); i++) {
if (n % i == 0) {
is_prime = false;
break;
}
}
if (is_prime) {
std::cout << n << " is prime" << std::endl;
} else {
std::cout << n << " is not prime" << std::endl;
}
return 0;
}一次可能的运行:
text
17
17 is prime不需要一直检查到 n - 1。如果一个数有大于平方根的因子,那么一定也有一个与之配对、且不大于平方根的因子,所以检查到 sqrt(n) 就够了。
正在加载概念检查...
continue
continue 不会结束整个循环。它只会跳过当前这一轮剩余的代码,然后直接进入下一轮。
下面的程序读取 10 个整数,只累加非负数的平方。遇到负数时,就跳过这一轮。
cpp
int n = 10;
int sum_square = 0;
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
if (num < 0) {
continue;
}
sum_square += num * num;
}
std::cout << "Sum of squares of non-negatives: " << sum_square << std::endl;当 num < 0 时,continue 会跳过 sum_square += num * num,所以负数不会参与计算。
注意
0 不是负数;它的平方是 0,加入总和也不会改变结果。正在加载概念检查...
如何选择
如果你想表达“整个循环到这里结束”,用 break。如果你只是想表达“跳过本轮剩余代码,但循环继续”,用 continue。
cpp
for (int x = 1; x <= 5; x++) {
if (x == 3) {
continue;
}
std::cout << x << std::endl;
}输出:
text
1
2
4
53 被跳过了,但循环并没有结束。
正在加载概念检查...
正在加载本节练习...
对比实验
读完 break 和 continue 的含义后,可以用下面的组件逐步比较它们。当循环走到 x == 3 时,continue 只跳过当前这一轮,而 break 会提前结束整个循环。
正在加载交互实验...