3.4 break 与 continue
break 和 continue 都会改变循环的正常执行流程,但它们的含义不同。
break:直接结束当前循环。continue:跳过本轮迭代(iteration)的剩余代码,开始下一轮循环。
break
当循环中已经完成目标,或者继续循环没有意义时,可以使用 break。
下面的程序判断一个整数是否为素数(prime number)。只要找到一个能整除 n 的数,就可以确认 n 不是素数,不需要再继续检查。
c
#include <stdio.h>
#include <math.h>
int main(void) {
int n;
scanf("%d", &n);
int is_prime = n > 1;
for (int i = 2; i <= (int)sqrt(n); i++) {
if (n % i == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
printf("%d 是素数\n", n);
} else {
printf("%d 不是素数\n", n);
}
return 0;
}一次可能的运行结果:
text
17
17 是素数这里不需要检查到 n - 1。如果一个数有大于平方根(square root)的因子,那么它一定也有一个小于平方根的配对因子,所以检查到 sqrt(n) 就够了。
正在加载概念检查...
continue
continue 不会结束整个循环,而是跳过本轮循环中剩下的代码,直接进入下一轮。
下面的程序读取 10 个整数,只计算非负整数的平方和。遇到负数时,本轮直接跳过。
c
int n = 10;
int sum_square = 0;
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
if (num < 0) {
continue;
}
sum_square += num * num;
}
printf("非负整数平方和:%d\n", sum_square);当 num < 0 时,continue 会跳过 sum_square += num * num,因此负数不会参与计算。
注意
0 不是负数,它的平方是 0,加入结果也不会改变总和。正在加载概念检查...
如何选择
如果你想“整个循环到此为止”,用 break。如果你只是想“这一轮不继续做了,下一轮照常开始”,用 continue。
c
for (int x = 1; x <= 5; x++) {
if (x == 3) {
continue;
}
printf("%d\n", x);
}运行结果:
text
1
2
4
53 被跳过了,但循环没有结束。
正在加载概念检查...
正在加载本节练习...
对比实验
读完 break 和 continue 的含义后,再用下面的组件单步比较:同样遇到 x == 3,continue 只是跳过本轮,而 break 会让整个循环提前结束。
正在加载交互实验...