核心区别
一句话概括:

(图片来源网络,侵删)
break:跳出整个循环,循环立即终止,执行循环后面的代码。continue:跳过本次循环,立即结束本次循环的剩余部分,直接进入下一次循环的判断。
break 语句
break 语句有两个主要用途:
- 在
switch语句中:用于终止switch语句的执行,跳出switch结构。 - 在循环中:用于立即终止
for,while,do-while循环的执行。
在循环中的用法
当 break 在循环内部执行时,程序会立即跳出当前所在的循环,不再执行循环体中剩余的语句,也不会再进行循环条件的判断。
示例:查找数组中第一个负数并退出
#include <stdio.h>
int main() {
int numbers[] = {2, 5, 8, -3, 10, 15, -7};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("正在查找第一个负数...\n");
for (int i = 0; i < size; i++) {
if (numbers[i] < 0) {
printf("找到第一个负数: %d\n", numbers[i]);
break; // 找到后立即跳出 for 循环
}
printf("检查了 %d\n", numbers[i]);
}
printf("循环已结束,\n");
return 0;
}
输出:

(图片来源网络,侵删)
正在查找第一个负数...
检查了 2
检查了 5
检查了 8
找到第一个负数: -3
循环已结束。
分析: 当 i=3 时,numbers[3] 是 -3,条件 numbers[i] < 0 为真,break 被执行。for 循环立即终止,后续的 10, 15, -7 都不再被检查。
continue 语句
continue 语句只能在循环(for, while, do-while)内部使用,它的作用是跳过本次循环中 continue 语句之后的所有代码,直接进入下一次循环的迭代。
- 对于
for循环:执行continue后,会先执行for循环的增量表达式(i++),然后再判断循环条件。 - 对于
while和do-while循环:执行continue后,直接跳转到循环条件的判断部分。
示例:打印 1 到 10 之间除了 5 以外的所有数字
#include <stdio.h>
int main() {
printf("打印 1 到 10,跳过 5:\n");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
printf("跳过 5\n");
continue; // 跳过本次循环的剩余部分(即 printf("%d\n", i);)
}
printf("%d\n", i);
}
return 0;
}
输出:

(图片来源网络,侵删)
打印 1 到 10,跳过 5:
1
2
3
4
跳过 5
6
7
8
9
10
分析: 当 i 的值等于 5 时,if 条件为真,continue 语句被执行,程序跳过了 printf("%d\n", i);,直接进行 i++,然后判断 i <= 10 是否成立,继续下一次循环,所以数字 5 没有被打印出来。
对比总结
| 特性 | break |
continue |
|---|---|---|
| 作用 | 终止整个循环 | 跳过本次循环 |
| 循环行为 | 循环立即结束,执行循环后面的代码 | 结束本次迭代,开始下一次迭代 |
| 影响范围 | 跳出其所在的最内层循环或 switch |
只影响其所在的当前循环 |
| 典型场景 | 找到目标后无需再遍历、遇到错误时退出 | 跳过不符合条件的特定情况、进行下一次处理 |
重要注意事项:嵌套循环
break 和 continue 都只对它们所在的最内层循环生效。
示例:嵌套循环中的 break
#include <stdio.h>
int main() {
for (int i = 1; i <= 3; i++) {
printf("外层循环 i = %d\n", i);
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 这个 break 只会跳出内层 for 循环
}
printf(" 内层循环 j = %d\n", j);
}
}
return 0;
}
输出:
外层循环 i = 1
内层循环 j = 1
外层循环 i = 2
内层循环 j = 1
外层循环 i = 3
内层循环 j = 1
分析: break 只结束了 j 循环,外层的 i 循环不受影响,继续执行。
如何跳出多层循环? 如果需要跳出多层循环,通常有以下几种方法:
- 使用
goto语句(简单直接,但有时被认为会破坏代码结构)。 - 使用标志位:设置一个布尔变量,在
break后,外层循环通过检查这个标志位来决定是否退出。 - 将循环封装成函数:在函数内部使用
return来退出整个函数,从而跳出所有循环。
break 在 switch 语句中的用法
这是 break 最经典的用法之一,用于防止case 穿透。
#include <stdio.h>
int main() {
int grade = 'B';
switch (grade) {
case 'A':
printf("优秀!\n");
break; // 如果没有 break,程序会继续执行 case 'B' 的代码
case 'B':
printf("良好!\n");
break;
case 'C':
printf("及格.\n");
break;
default:
printf("无效等级.\n");
}
return 0;
}
输出:
良好!
分析: grade 的值是 'B',程序进入 case 'B',打印 "良好!",然后遇到 break,立即退出整个 switch 语句,如果没有 break,它会继续执行 case 'C' 和 default 的代码,这通常不是我们想要的结果。
break是一个“终结者”,它彻底结束一个循环或switch语句。continue是一个“跳板”,它让循环跳过当前这一次,直接开始下一次。
理解并正确使用这两个关键字,可以让你的循环逻辑更加清晰和高效。
