break 是 C 语言中的一个关键字,它主要有两种核心用途:

- 跳出
switch语句 - 提前终止循环
下面我们分别对这两种用法进行详细说明,并提供代码示例。
跳出 switch 语句
这是 break 最常见的用法之一,在 switch 语句中,case 标签只是一个入口点,程序会从这个入口点开始执行,并继续向下执行,直到遇到 break 语句或者 switch 语句的末尾,如果不使用 break,就会发生“case 穿透”(case fall-through)现象。
语法:
switch (expression) {
case constant1:
// 代码块 1
break; // 当 expression 的值等于 constant1 时,执行完代码块 1 后,遇到 break,立即跳出整个 switch 语句
case constant2:
// 代码块 2
break; // 同理
default:
// 默认代码块
break; // 虽然是最后一句,但加上 break 是一个好习惯
}
示例代码:

#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break; // 当 day 是 3 时,打印 "星期三",然后遇到 break,立即跳出 switch 结构
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("无效的输入\n");
break;
}
return 0;
}
执行结果:
星期三
如果不使用 break 会发生什么?(Case Fall-through)
#include <stdio.h>
int main() {
int grade = 'B'; // 字符 'B' 的 ASCII 码是 66
switch (grade) {
case 'A':
printf("优秀!\n");
break;
case 'B':
printf("良好!\n");
// 没有 break,程序会继续执行下一个 case
case 'C':
printf("及格!\n");
// 也没有 break
case 'D':
printf("不及格!\n");
break;
default:
printf("无效等级!\n");
}
return 0;
}
执行结果:
良好!
及格!
不及格!
可以看到,当 grade 是 'B' 时,程序进入了 case 'B',打印了 "良好!",因为没有 break,它继续向下执行了 case 'C' 和 case 'D' 的代码,直到遇到 break 才停止。
提前终止循环
break 语句可以用于任何循环结构中(for, while, do-while),当 break 在循环体内被执行时,程序会立即终止当前循环,并跳转到循环体下方的第一条语句继续执行。
语法:
for (initialization; condition; increment) {
// 循环体
if (some_condition) {
break; // some_condition 为真,立即跳出 for 循环
}
// 其他代码
}
// 循环在这里结束
示例代码(在 for 循环中使用 break):
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
printf("i = %d\n", i);
// 当 i 等于 5 时,跳出循环
if (i == 5) {
printf("检测到 i=5,循环终止!\n");
break;
}
}
printf("循环已结束,程序继续向下执行,\n");
return 0;
}
执行结果:
i = 1
i = 2
i = 3
i = 4
i = 5
检测到 i=5,循环终止!
循环已结束,程序继续向下执行。
示例代码(在 while 循环中使用 break):
#include <stdio.h>
int main() {
int number;
printf("请输入一个数字 (输入 0 退出): ");
while (1) { // 1 代表永远为真,是一个无限循环
scanf("%d", &number);
if (number == 0) {
printf("输入为 0,程序退出,\n");
break; // 用户输入 0 时,跳出 while 循环
}
printf("你输入的数字是: %d\n", number);
printf("请输入下一个数字 (输入 0 退出): ");
}
printf("程序结束,\n");
return 0;
}
执行流程:
- 程序进入一个无限
while循环。 - 等待用户输入。
- 如果用户输入
0,if条件成立,break被执行,循环终止。 - 程序打印 "程序结束。" 并正常退出。
break 的重要注意事项
-
作用域限制:
break只能跳出它所在的最近的一层switch或循环结构。for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (j == 1) { break; // 这个 break 只会跳出内层的 for (j) 循环 } printf("j = %d\n", j); } printf("i = %d\n", i); }在上面的代码中,
break只能终止j的循环,i的循环会继续执行。 -
与
continue的区别:这是初学者最容易混淆的地方。break:立即终止整个循环,循环不再继续。continue:立即终止本次循环,跳过循环体中continue之后的代码,直接进入下一次循环的条件判断。
对比示例:
#include <stdio.h> int main() { printf("--- 使用 break ---\n"); for (int i = 0; i < 5; i++) { if (i == 2) { break; // i=2 时,整个循环结束 } printf("i = %d\n", i); } printf("\n--- 使用 continue ---\n"); for (int i = 0; i < 5; i++) { if (i == 2) { continue; // i=2 时,跳过本次循环的 printf 语句,直接进入 i++ 和下一次循环 } printf("i = %d\n", i); } return 0; }执行结果:
--- 使用 break --- i = 0 i = 1 --- 使用 continue --- i = 0 i = 1 i = 3 i = 4 -
break在if语句中单独使用:如果在if语句中单独使用break,且这个if不在switch或循环内部,那么编译器会报错。if (1) { break; // 错误!'break' not within loop or switch }
| 用法 | 作用 | 适用场景 |
|---|---|---|
跳出 switch |
终止 switch 语句的执行,防止 case 穿透。 |
switch 语句的 case 块末尾。 |
| 终止循环 | 立即终止 for, while, do-while 循环,不再执行后续的循环次数。 |
当满足某个特定条件时,需要提前结束循环。 |
| 跳出嵌套结构 | 只能跳出最近的一层 switch 或循环。 |
需要精确控制退出哪一层结构时。 |
break 是一个强大且常用的控制流语句,掌握它的正确用法对于编写清晰、高效的 C 语言代码至关重要。
