Skip to content

11. break 与 continue:循环的紧急干预

前置学习:while 循环for 循环

虽然循环有它自己的结束条件,但很多时候,由于赛场上各种突发情况,我们需要在代码执行到一半时,强行改变循环的命运。 C++ 提供了两位“紧急干预专员”:breakcontinue。它们虽然长得像,但作用完全不同。

1. 暴力砸碎:break

我们在学习 switch 语句时见过 break,它的作用是“刹车”。在循环中,break 的作用极其暴力:直接砸碎当前所在的整个循环,彻底不玩了,直接跳到循环大括号的外面!

🏃 跑步比喻:体育课要跑 10 圈。跑第 3 圈的时候,你突然崴脚了。这时候触发 break,你直接被送去医务室,剩下的 7 圈再也不用跑了

实战场景:无限循环的脱出 在 OI 赛场上,我们经常会故意写一个死循环 while(true),然后在里面用 ifbreak 配合,自己掌控结束的时机:

cpp
int hp = 100;
while (true) { // 故意写成的死循环
    int damage;
    cin >> damage;
    hp -= damage;
    
    // 一旦血量归零,立刻强行砸碎循环结束战斗
    if (hp <= 0) {
        cout << "Game Over!" << endl;
        break; 
    }
}

2. 战略跳过:continue

相比于暴力的 breakcontinue 就显得温柔很多。它的意思是:放弃当前这一圈剩下的代码,立刻掉头,开始下一圈循环。

🏃 跑步比喻:体育课要跑 10 圈。跑第 3 圈的时候,你鞋带散了。这时候触发 continue,你停下来系鞋带,这一圈不作数,但你还得接着去跑第 4 圈、第 5 圈...

实战场景:跳过特定数字 题目要求打印 1 到 10 之间所有的数字,但是要跳过数字 4

cpp
for (int i = 1; i <= 10; i++) {
    if (i == 4) {
        continue; // 当 i 是 4 时,立刻掉头去执行 i++,不执行下面的 cout
    }
    cout << i << " "; 
}
// 最终输出:1 2 3 5 6 7 8 9 10 (没有 4)

3. 💀 致命陷阱:while 里的 continue

for 循环里用 continue 很安全,但如果在 while 循环里用,极易引发死循环!

cpp
int i = 1;
while (i <= 5) {
    if (i == 3) {
        continue; // 灾难降临!
    }
    cout << i << " ";
    i++; 
}

错在哪里?i 变成 3 时,触发了 continue,代码直接掉头回到 while(i <= 5) 进行判断。这就导致底下的 i++ 被永远跳过了i 会永远卡在 3,引发 TLE(超时)死循环。

4. 动手实践

md
1. 打开左下角的代码沙盒。
2. 试着写一个程序:用 `for` 循环从 1 遍历到 100。
3. 要求:只要这个数字是 7 的倍数,就用 `continue` 跳过它不打印。
4. 要求:当遇到第一个既是 7 的倍数,又是 5 的倍数的数字(即 35)时,用 `break` 彻底终止循环。
💻 运行代码

C++ 在线评测沙盒

📥 标准输入 (cin):
📤 终端输出 (cout):