break: 立即终止并跳出当前所在的循环(for,while,do-while)或switch语句。continue: 立即跳过当前循环的剩余部分,直接进入下一次循环的判断/迭代阶段。
break 语句
break 的作用就像它的名字一样——“打破”,它会立即终止整个循环的执行,程序流程会继续执行循环体后面的第一条语句。

(图片来源网络,侵删)
主要用途:
- 在循环中:当满足某个条件时,提前结束整个循环。
- 在
switch语句中:结束case分支的执行,防止“case 穿透”(fall-through)。
在循环中的示例:
#include <stdio.h>
int main() {
int i;
// 使用 for 循环
printf("--- 使用 break 的 for 循环 ---\n");
for (i = 1; i <= 10; i++) {
if (i == 5) {
printf("当 i 等于 5 时,break 被执行,循环结束,\n");
break; // 当 i 为 5 时,循环立即终止
}
printf("i = %d\n", i);
}
printf("循环已结束,i 的最终值是: %d\n\n", i);
// 使用 while 循环
printf("--- 使用 break 的 while 循环 ---\n");
int j = 1;
while (j <= 10) {
if (j == 7) {
printf("当 j 等于 7 时,break 被执行,循环结束,\n");
break; // 当 j 为 7 时,循环立即终止
}
printf("j = %d\n", j);
j++;
}
printf("循环已结束,j 的最终值是: %d\n", j);
return 0;
}
输出结果:
--- 使用 break 的 for 循环 ---
i = 1
i = 2
i = 3
i = 4
当 i 等于 5 时,break 被执行,循环结束。
循环已结束,i 的最终值是: 5
--- 使用 break 的 while 循环 ---
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
当 j 等于 7 时,break 被执行,循环结束。
循环已结束,j 的最终值是: 7
分析:
在 for 循环中,当 i 变为 5 时,if 条件成立,break 被执行,程序立即跳出 for 循环,不再执行 i=6 和 i=7 等后续操作。while 循环同理。
continue 语句
continue 的作用是“继续”,它不会终止整个循环,而是会跳过当前循环周期中 continue 语句之后的所有代码,直接进入下一次循环的条件判断和迭代。
主要用途:
当遇到特定条件时,跳过本次循环中剩余的操作,直接开始下一次循环,常用于过滤数据或跳过不符合条件的处理。

(图片来源网络,侵删)
在循环中的示例:
#include <stdio.h>
int main() {
int i;
// 使用 for 循环
printf("--- 使用 continue 的 for 循环 ---\n");
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // i 是偶数,跳过下面的打印语句,直接进入下一次循环
}
printf("i = %d (奇数)\n", i);
}
printf("\n");
// 使用 while 循环
printf("--- 使用 continue 的 while 循环 ---\n");
int j = 0;
while (j < 10) {
j++; // 先递增,避免死循环
if (j % 3 == 0) {
printf("j = %d 是 3 的倍数,跳过打印,\n", j);
continue; // j 是 3 的倍数,跳过下面的打印语句
}
printf("j = %d\n", j);
}
return 0;
}
输出结果:
--- 使用 continue 的 for 循环 ---
i = 1 (奇数)
i = 3 (奇数)
i = 5 (奇数)
i = 7 (奇数)
i = 9 (奇数)
--- 使用 continue 的 while 循环 ---
j = 1
j = 2
j = 3 是 3 的倍数,跳过打印。
j = 4
j = 5
j = 6 是 3 的倍数,跳过打印。
j = 7
j = 8
j = 9 是 3 的倍数,跳过打印。
j = 10
分析:
在 for 循环中,每当 i 是偶数(i % 2 == 0),continue 就会执行,程序会跳过 printf 语句,直接执行 i++ 和下一次循环条件判断 i <= 10,所以只打印了奇数。while 循环的逻辑也类似,它跳过了 3 的倍数的打印。
break vs. continue 对比
| 特性 | break |
continue |
|---|---|---|
| 中文含义 | 打断、终止 | 继续、跳过 |
| 作用范围 | 终止整个循环或 switch 语句 |
跳过当前循环的剩余部分 |
| 对循环的影响 | 循环完全结束,程序执行循环后的代码 | 循环继续进行,进入下一次迭代 |
| 在循环中的位置 | 可以放在循环体的任何位置 | 只能放在循环体内部,且通常在条件判断之后 |
| 比喻 | 看到红灯,直接停车熄火,不再开。 | 看到路上的坑,绕过去,继续往前开。 |
重要注意事项
break 和 continue 只能作用于最近的循环
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);
}
printf(" 内层循环已结束,\n");
}
printf("外层循环已结束,\n");
return 0;
}
输出结果:
外层循环 i = 1
内层循环 j = 1
内层循环已结束。
外层循环 i = 2
内层循环 j = 1
内层循环已结束。
外层循环 i = 3
内层循环 j = 1
内层循环已结束。
外层循环已结束。
分析:
当 j == 2 时,break 终止的是内层 for (j...) 循环,外层 for (i...) 循环不受影响,继续执行 i=2 和 i=3。
如何跳出多层嵌套循环?
如果你需要从多层嵌套循环中跳出来,有几种方法:
- 使用
goto语句:这是最直接的方法,但不被所有程序员喜欢。 - 使用标志位:定义一个布尔变量,在需要时设置它,然后在每层循环的开头检查这个变量。
- 将循环封装成函数:在函数中使用
return来退出。
示例:使用 goto 跳出多层循环
#include <stdio.h>
int main() {
int found = 0; // 标志位
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 2 && j == 2) {
found = 1;
goto end_loops; // 跳转到标签 end_loops
}
printf("(%d, %d) ", i, j);
}
printf("\n");
}
end_loops:
if (found) {
printf("\n在 (2, 2) 处找到了目标,已退出所有循环,\n");
}
return 0;
}
记住这个简单的区别:
- 当你想要彻底结束一个循环时,使用
break。 - 当你想要跳过当前这一次循环,但还想继续下一次循环时,使用
continue。
理解 break 和 continue 对于编写高效、逻辑清晰的 C 语言代码至关重要,它们是控制程序流程的利器。
