break 语句
break 的意思是“中断”或“跳出”,它的作用是立即终止并退出当前所在的循环(for, while, do-while)或 switch 语句。

(图片来源网络,侵删)
在循环中的作用
当 break 在循环体内执行时,程序会立即跳出整个循环,不再执行循环体中剩余的语句,也不会检查循环的终止条件,而是直接执行循环体之后的下一条语句。
示例代码:
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("i = %d\n", i);
// 当 i 等于 5 时,跳出整个 for 循环
if (i == 5) {
break; // 跳出循环
}
}
printf("循环已结束,i 的最终值是 %d\n", i);
return 0;
}
输出结果:
i = 1
i = 2
i = 3
i = 4
i = 5
循环已结束,i 的最终值是 5
代码分析:

(图片来源网络,侵删)
- 循环本应执行 10 次,从
i=1到i=10。 - 当
i的值变为 5 时,if条件成立,break语句被执行。 - 程序立即跳出
for循环,不再执行i=6到i=10的循环。 - 执行循环体后面的
printf语句。
在 switch 语句中的作用
break 在 switch 语句中非常关键,用于终止 switch 块的执行,如果没有 break,程序会发生“贯穿”(fall-through)现象,即执行完一个 case 后,会继续执行下一个 case,直到遇到 break 或 switch 结束。
示例代码:
#include <stdio.h>
int main() {
int grade = 'B'; // 注意:这里用字符,会自动转换为 ASCII 码
switch (grade) {
case 'A':
printf("优秀!\n");
break; // 终止 switch
case 'B':
printf("良好!\n");
break; // 终止 switch
case 'C':
printf("及格!\n");
break; // 终止 switch
default:
printf("不及格,\n");
}
return 0;
}
输出结果:
良好!
代码分析:

(图片来源网络,侵删)
grade的值是'B'。- 程序匹配到
case 'B',执行printf("良好!\n");。 - 然后执行
break;,立即退出switch结构。 - 如果没有
break;,程序会继续执行case 'C'和default的代码。
continue 语句
continue 的意思是“继续”,它的作用是跳过当前循环体中 continue 语句之后的所有代码,立即进入下一次循环的迭代。
break:跳出整个循环。continue:跳过本次循环的剩余部分,进入下一次循环。
continue 只能用于循环语句(for, while, do-while),不能用于 switch。
示例代码:
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
// 当 i 是偶数时,跳过本次循环的剩余部分
if (i % 2 == 0) {
continue; // 跳过 printf,直接进入 i++ 和下一次循环条件判断
}
printf("i = %d\n", i);
}
printf("循环已结束,\n");
return 0;
}
输出结果:
i = 1
i = 3
i = 5
i = 7
i = 9
循环已结束。
代码分析:
- 循环从
i=1开始。 i=1:是奇数,if条件不成立,不执行continue,打印i = 1。i=2:是偶数,if条件成立,执行continue,程序立即跳过printf语句,直接执行i++(i变为 3),然后判断i <= 10,进入下一次循环。i=3:是奇数,打印i = 3。- ...以此类推,最终只打印了所有的奇数。
break 和 continue 的核心区别
| 特性 | break |
continue |
|---|---|---|
| 中文含义 | 中断,跳出 | 继续,跳过 |
| 作用范围 | 循环(for, while, do-while)和 switch |
仅限循环(for, while, do-while) |
| 行为 | 完全终止并退出当前循环或 switch 语句。 |
跳过当前循环迭代中剩余的语句,直接开始下一次迭代。 |
| 对循环控制变量的影响 | 立即退出,循环变量值停留在 break 执行时的值。 |
不影响,continue 执行后,循环会正常进行下一次迭代(for 循环会执行 i++)。 |
| 比喻 | 看到红灯,立即停车并掉头离开这条路。 | 看到路上的坑,直接开过去,继续往前开。 |
嵌套循环中的使用
在嵌套循环中,break 和 continue 默认只作用于离它最近的那一层循环。
示例:break 在嵌套循环中
#include <stdio.h>
int main() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 这个 break 只会跳出内层 for 循环
}
printf("i=%d, j=%d\n", i, j);
}
}
return 0;
}
输出结果:
i=1, j=1
i=2, j=1
i=3, j=1
分析:
- 当
j变为 2 时,内层循环的break被执行,跳出内层for循环。 - 外层循环不受影响,继续执行
i=2和i=3的循环。
示例:continue 在嵌套循环中
#include <stdio.h>
int main() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue; // 这个 continue 只会跳过内层循环的本次迭代
}
printf("i=%d, j=%d\n", i, j);
}
}
return 0;
}
输出结果:
i=1, j=1
i=1, j=3
i=2, j=1
i=2, j=3
i=3, j=1
i=3, j=3
分析:
- 当
j变为 2 时,continue被执行,跳过内层循环中printf语句,直接进行j++和下一次内层循环判断。 j=2的那一行从未被打印,但外层循环正常进行。
如何跳出多层循环?
如果想要跳出多层循环,break 和 continue 本身是无能为力的,通常有以下几种方法:
-
使用
goto语句:虽然goto不被推荐,但在跳出深层嵌套时,它是最直接有效的方法。for (...) { for (...) { if (condition) { goto end_loop; // 直接跳转到标签 } } } end_loop: // 循环结束后的代码 -
使用标志位:定义一个布尔变量,通过条件判断来控制外层循环的退出。
int should_exit = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (some_condition) { should_exit = 1; break; // 跳出内层循环 } } if (should_exit) { break; // 跳出外层循环 } } -
将循环封装成函数:在函数中使用
return来直接返回,这是最优雅和推荐的方法。void process_data() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (some_condition) { return; // 直接退出整个函数,也就退出了所有循环 } // ... 其他处理 } } }
break:用于彻底结束一个循环或switch结构,就像一个紧急停止按钮。continue:用于跳过循环的当前迭代,继续下一次,就像一个“忽略并继续”的按钮。- 理解它们的核心区别和行为,对于编写逻辑清晰、高效的 C 语言代码至关重要,请根据你的具体需求选择使用哪一个。
