Appearance
11. break 与 continue:循环的紧急干预
虽然循环有它自己的结束条件,但很多时候,由于赛场上各种突发情况,我们需要在代码执行到一半时,强行改变循环的命运。 C++ 提供了两位“紧急干预专员”:break 和 continue。它们虽然长得像,但作用完全不同。
1. 暴力砸碎:break
我们在学习 switch 语句时见过 break,它的作用是“刹车”。在循环中,break 的作用极其暴力:直接砸碎当前所在的整个循环,彻底不玩了,直接跳到循环大括号的外面!
🏃 跑步比喻:体育课要跑 10 圈。跑第 3 圈的时候,你突然崴脚了。这时候触发
break,你直接被送去医务室,剩下的 7 圈再也不用跑了。
实战场景:无限循环的脱出 在 OI 赛场上,我们经常会故意写一个死循环 while(true),然后在里面用 if 和 break 配合,自己掌控结束的时机:
cpp
int hp = 100;
while (true) { // 故意写成的死循环
int damage;
cin >> damage;
hp -= damage;
// 一旦血量归零,立刻强行砸碎循环结束战斗
if (hp <= 0) {
cout << "Game Over!" << endl;
break;
}
}2. 战略跳过:continue
相比于暴力的 break,continue 就显得温柔很多。它的意思是:放弃当前这一圈剩下的代码,立刻掉头,开始下一圈循环。
🏃 跑步比喻:体育课要跑 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` 彻底终止循环。