← 目录 / 第五章 · 循环结构 / 5.4 break 与 continue

5.4 break 与 continue

循环运行过程中,有时需要提前结束循环,或者跳过某一次不做处理。break 和 continue 就是控制循环流程的两个关键字。

break 与 continue

循环运行过程中,有时需要提前结束循环,或者跳过某一次不做处理。breakcontinue 就是控制循环流程的两个关键字。

break 跳出整个循环
遇到 break 后,立即终止当前循环,继续执行循环后面的代码。也可用于跳出 switch
continue 跳过本次迭代
遇到 continue 后,跳过本次循环体中剩余的代码,直接进入下一次迭代,循环不会终止。

5.4.1 break 语句

break 关键字用于跳出当前所在的循环(或 switch),继续执行循环后面的代码。常用于"找到了就没必要继续找下去"的场景:

C++ · break 示例(找第一个被 7 整除的数)
1for (int i = 1; i <= 100; i++)
2{
3 if (i % 7 == 0)
4 {
5 cout << "第一个被7整除的数是:" << i << endl;
6 break; // 找到了就立刻跳出,不再继续
7 }
8}
9// 输出:第一个被7整除的数是:7

5.4.2 continue 语句

continue 关键字用于跳过当前循环的剩余部分,直接进入下一次迭代。它不会终止循环,只是跳过本次迭代中剩余的代码:

C++ · continue 示例(输出奇数)
1for (int i = 1; i <= 10; i++)
2{
3 if (i % 2 == 0)
4 {
5 continue; // 偶数:跳过本次,不执行 cout
6 }
7 cout << i << " "; // 只有奇数才到这里
8}
9// 输出:1 3 5 7 9
💡
一句话总结:break 是"我不想玩了,退出循环";continue 是"这次跳过,下一轮继续玩"。

5.4.3 在嵌套循环中的作用范围

breakcontinue 都只作用于它们所在的最内层循环,不会影响外层循环:

外层循环 — 不受影响,继续正常执行
for (int i = 1; i <= 3; i++)
内层循环 — break 只在这里生效
for (int j = 1; j <= 3; j++)
if (j == 2) break; // 只跳出内层这一层
↓ 跳到这里(内层循环结束),外层 i 继续下一轮
C++ · break 在嵌套循环中只跳一层
1for (int i = 1; i <= 3; i++) // 外层
2{
3 for (int j = 1; j <= 3; j++) // 内层
4 {
5 if (j == 2) break; // 只跳出内层 for(j...)
6 cout << i << "," << j << " ";
7 }
8}
9// 输出:1,1 2,1 3,1 —— 外层照常跑满 3 轮,每轮内层只打印 j=1 就 break

如果确实需要"一次性跳出所有层",常见做法是用一个标志变量记录"是否需要终止",外层循环每轮开始时检查这个标志:

C++ · 用标志变量跳出多层循环
1bool found = false; // 标志变量:是否已经找到目标
2for (int i = 1; i <= 3 && !found; i++) // 外层:加上 !found 条件
3{
4 for (int j = 1; j <= 3; j++)
5 {
6 if (i == 2 && j == 2)
7 {
8 found = true; // 标记找到,外层下一轮会因为 !found 而停止
9 break; // 先跳出内层
10 }
11 }
12}

5.4.4 常见陷阱与易错点

把本节内容汇总成几条最容易踩坑的规则:

1
误以为 break 能跳出所有层:嵌套循环中 break 只能跳出最内层的循环,外层会继续正常运行。需要一次性终止所有层时,要用标志变量或把逻辑提取成函数用 return 退出。
2
continue 跳过了更新语句,导致死循环:这是 while 循环里非常隐蔽的坑——如果更新语句(比如 i++)写在 continue判断之后,一旦触发 continue,更新语句会被跳过,条件永远不变,循环永远不会结束。for 循环不会有这个问题,因为它的更新语句在结构上独立于循环体,即使触发 continue 也一定会执行。
3
在 switch 里的 break 和循环里的 break 搞混:如果 switch 语句嵌套在循环内部,switch 里的 break 只会跳出 switch 本身,并不会影响外层的循环,这一点容易和"break 跳出循环"的直觉混淆。
C++ · continue 导致 while 死循环(反面例子,请勿模仿)
1int i = 0;
2while (i < 10)
3{
4 if (i % 2 == 0)
5 {
6 continue; // ⚠️ 偶数时直接跳过下面的 i++
7 }
8 cout << i;
9 i++; // ⚠️ i=0 时 continue 会跳过这一行,i 永远是 0,死循环!
10}
🚫
修复方法:while/do-while 循环中使用 continue 时,一定要确保更新语句在 continue 触发之前就已经执行,或者把更新语句挪到 continue 判断的前面。这也是为什么"循环次数已知"的场景更推荐用 for——更新语句在结构上独立出来,天然不会被 continue 波及。