只依靠循环条件,很多时候没法等到条件自动结束。有时需要直接跳出整个循环,或是放弃本轮、直接开启下一轮迭代,这正是 break 和 continue 的作用。我们借助两段示例,把两者的区别说清楚。
break:立刻结束循环
break 遇到它就立即结束整个循环,后面的循环体不再执行。它几乎总是和 if 配合使用:
break;示例:输入负数就提前结束
// 程序计算最多 10 个数字的总和,输入负数则循环终止
#include <stdio.h>
int main() {
int i;
double number, sum = 0.0;
for (i = 1; i <= 10; ++i) {
printf("输入 n%d: ", i);
scanf("%lf", &number);
// 如果用户输入的是负数,循环结束
if (number < 0.0) {
break;
}
sum += number; // 等同 sum = sum + number;
}
printf("总和 = %.2lf", sum);
return 0;
}输出:
输入 n1: 2.4
输入 n2: 4.5
输入 n3: 3.4
输入 n4: -3
总和 = 10.30程序最多加 10 个数字,但用户输入负数时 break 立刻中断循环。另外 break 也是 switch 语句里跳出分支的关键(见条件分支章节)。
continue:跳过这一次
continue 跳过本次循环的剩余语句,直接进入下一轮迭代:
continue;示例:负数不参与求和
// 程序计算最多 10 个数字的总和,从计算中跳过负数
#include <stdio.h>
int main() {
int i;
double number, sum = 0.0;
for (i = 1; i <= 10; ++i) {
printf("输入 n%d: ", i);
scanf("%lf", &number);
if (number < 0.0) {
continue; // 负数直接跳过,不加入 sum
}
sum += number; // 等同 sum = sum + number;
}
printf("总和 = %.2lf", sum);
return 0;
}输出:
输入 n1: 1.2
输入 n2: 3.4
输入 n3: 6.7
输入 n4: 4.5
输入 n5: -3.8
输入 n6: -48.8
输入 n7: 34.9
输入 n8: -4.6
输入 n9: -1000
输入 n10: 18
总和 = 68.70负数输入时 continue 让程序跳过 sum += number,直接进入下一轮循环,所以总和不含负数。
continue 流程:遇到符合条件的数据跳过本轮,直接进入下一轮
break 和 continue 的区别
| 语句 | 作用 | 典型场景 |
|---|---|---|
break | 直接结束整个循环 | 输入非法值终止、找到结果提前退出 |
continue | 跳过本次循环,继续下一轮 | 过滤掉不合条件的数据 |
两者在嵌套循环里只作用于最内层那层循环。想跳出多层还是靠 goto(见goto 章)。
break 直接结束整个循环,continue 只跳过当前这一轮,一个终止、一个跳过,都是循环里的中断开关。