break 语句的核心作用是 “立即终止并跳出” 它所在的循环或 switch 语句,执行 break 后,程序会立即跳转到被终止的循环或 switch 语句的下一条语句继续执行。

break 就像一个“紧急出口”,一旦执行,就立即结束当前的结构。
主要用途
break 语句主要有两个用途:
- 用于循环中(
for,while,do-while) - 用于
switch语句中
下面我们分别来看具体的使用场景和示例。
在循环中
当 break 出现在循环体内时,它的作用是提前终止整个循环,一旦 break 被执行,循环体内的后续代码将不再执行,循环的条件判断也会被跳过,程序直接执行循环体外的下一条语句。

示例1:在 for 循环中
#include <stdio.h>
int main() {
printf("开始演示 for 循环中的 break:\n");
for (int i = 1; i <= 10; i++) {
printf("当前 i 的值是: %d\n", i);
// 当 i 等于 5 时,执行 break,循环终止
if (i == 5) {
printf("i 等于 5,执行 break,循环结束!\n");
break; // 循环在这里被终止
}
}
printf("循环已结束,程序继续执行,\n");
return 0;
}
输出结果:
开始演示 for 循环中的 break:
当前 i 的值是: 1
当前 i 的值是: 2
当前 i 的值是: 3
当前 i 的值是: 4
当前 i 的值是: 5
i 等于 5,执行 break,循环结束!
循环已结束,程序继续执行。
分析:
循环本应执行 10 次(i 从 1 到 10),但当 i 变为 5 时,if 条件成立,break 被执行,程序立即跳出 for 循环,不再执行 i=6, 7, 8, 9, 10 的情况,直接执行循环后面的 printf 语句。
示例2:在 while 循环中
#include <stdio.h>
int main() {
int count = 0;
printf("开始演示 while 循环中的 break:\n");
while (1) { // 这是一个无限循环
count++;
printf("计数: %d\n", count);
// 当 count 达到 3 时,终止循环
if (count >= 3) {
break;
}
}
printf("循环已结束,count 值为: %d\n", count);
return 0;
}
输出结果:
开始演示 while 循环中的 break:
计数: 1
计数: 2
计数: 3
循环已结束,count 值为: 3
分析:
while(1) 是一个无限循环,我们依靠 break 语句来在满足特定条件(count >= 3)时退出循环,这是 break 一个非常常见的用途,用于处理不确定循环次数的情况。
在 switch 语句中
这是 break 在 C 语言中最经典、最重要的用法,在 switch 语句中,每个 case 标签只是一个入口点,如果没有 break,程序会顺序执行下一个 case 的代码,直到遇到 break 或 switch 语句的末尾,这种现象称为 “case 穿透”(fall-through)。
break 的作用就是阻止这种“穿透”,确保在执行完当前 case 的代码后,立即退出 switch 结构。
示例:switch 中的 break
#include <stdio.h>
int main() {
int grade = 'B'; // 假设学生成绩为 B
switch (grade) {
case 'A':
printf("优秀!\n");
break; // 如果成绩是 A,执行这条,break 退出 switch
case 'B':
printf("良好,\n");
break; // 如果成绩是 B,执行这条,break 退出 switch
case 'C':
printf("及格,\n");
break; // 如果成绩是 C,执行这条,break 退出 switch
default:
printf("不及格或无效成绩,\n");
break; // 虽然这里是 default,最后也会执行,但加上是好习惯
}
printf("成绩评定结束,\n");
return 0;
}
输出结果:
良好。
成绩评定结束。
分析:
grade的值是'B'。switch语句开始匹配,找到case 'B':这个入口点。- 程序执行
printf("良好,\n");。 - 接着遇到
break;语句,程序立即跳出整个switch结构。 - 不再检查
case 'C'或default,直接执行switch后面的printf("成绩评定结束,\n");。
对比:如果没有 break(case 穿透)
如果我们把上面的例子中的 break 都去掉(为了演示,只去掉部分),看看会发生什么:
// 注意:这是一个演示穿透现象的例子,通常我们不希望这样
int grade = 'B';
switch (grade) {
case 'A':
printf("优秀!\n");
// 没有 break
case 'B':
printf("良好,\n");
// 没有 break
case 'C':
printf("及格,\n");
// 没有 break
default:
printf("不及格或无效成绩,\n");
}
输出结果:
良好。
及格。
不及格或无效成绩。
分析:
- 从
case 'B':开始执行。 - 打印 "良好。"。
- 因为没有
break,程序继续向下执行case 'C':的代码,打印 "及格。"。 - 依然没有
break,程序继续执行default:的代码,打印 "不及格或无效成绩。"。
这个例子清晰地展示了 break 在 switch 语句中的重要性:它确保每个 case 是独立的,互不干扰。
重要注意事项和限制
-
break只能跳出最近的一层循环或switchbreak位于嵌套的循环或switch语句中,它只会跳出最内层的那个结构。for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (j == 2) { break; // 这个 break 只能跳出内层的 for (j) 循环 } printf("j = %d ", j); } printf("\n"); }输出会是:
j = 0 j = 1 j = 0 j = 1 j = 0 j = 1 j = 0 j = 1 j = 0 j = 1外层循环
for (i)依然会执行 5 次。 -
break不能用于if语句(除非if在循环或switch内部)if语句不是循环结构,也不是switch结构,你不能单独用break来跳出if语句。if (x > 10) { break; // 错误!编译器会报错 }如果你想在
if条件满足时退出循环,应该把break放在if语句块内部,而if语句本身在循环内部。while (1) { if (x > 10) { break; // 正确:这里的 break 用于跳出 while 循环 } // ... } -
break与continue的区别 这是一个非常容易混淆的点,必须牢记:break: 终止并跳出整个循环,循环就此结束。continue: 立即结束本次循环,跳过本次循环中continue之后的语句,直接进入下一次循环的条件判断。
示例对比:
// 使用 break printf("--- 使用 break ---\n"); for (int i = 1; i <= 5; i++) { if (i == 3) { break; // i=3 时,整个循环结束 } printf("i = %d\n", i); } // 输出: i = 1, i = 2 printf("\n--- 使用 continue ---\n"); for (int i = 1; i <= 5; i++) { if (i == 3) { continue; // i=3 时,跳过本次循环的 printf,直接进入 i=4 } printf("i = %d\n", i); } // 输出: i = 1, i = 2, i = 4, i = 5
| 用途 | 作用 | 示例场景 |
|---|---|---|
| 在循环中 | 立即终止整个循环,跳到循环体外的下一条语句。 | 在找到目标元素后退出搜索循环;在计数达到某个值后停止。 |
在 switch 中 |
执行完当前 case 后,立即退出 switch 结构,防止“case 穿透”。 |
为 switch 的每个 case 分支提供独立的代码块。 |
break 的核心是“跳出”,它是 C 语言中用于控制程序流程、实现提前退出的强大工具。
