📄 一句话概括
break; —— 循环里的断电开关:执行到它,本圈剩下的语句、后面的圈、连"更新 + 再判条件"全省了,一步跳到循环外。典型场景是实例04"找到就停":一旦命中目标,没必要再找。注意它只跳一层——嵌套里只跳出自己所在的内层(5.4 细说)。
📝 本节和前面几节的关系
break 在 4.4 的 switch 里已经登场(跳出的语义同款:结束当前结构);5.2.2 的省略变体也提过"省了条件要靠 break 出门"。本篇把它在循环里的完整行为讲透。它总和 if 搭伙:条件一到,立刻收工。
一、break 干了什么:跳过一切,直接出门
for (int i = 1; i <= 100; i++) {
if (i == 7) break; // 命中 7,收工
cout << i << " ";
}
cout << "循环结束" << endl;
输出:1 2 3 4 5 6 循环结束。第 7 圈时 break 生效:7 不打印(在 break 之后),后面 93 圈也不跑。
关键点:break 跳过的不仅是"剩余语句",还有更新和条件判断——循环就此终结,像被拉了总闸。循环外接着执行的代码照旧跑("循环结束" 打出来了)。
二、实例 04:使用 break 语句跳出循环
任务:在一串数里找第一个负数,找到就停下并报告位置。
#include <iostream>
using namespace std;
int main() {
int nums[5] = {3, 8, -2, 5, -9}; // 本章先"看得懂"数组,第 6 章细讲
int found = 0; // 记录位置:0 表示没找到
for (int i = 0; i < 5; i++) {
if (nums[i] < 0) { // 找到第一个负数
found = i + 1; // 位置从 1 数起
break; // 任务完成,不再往后看
}
}
if (found > 0)
cout << "找到第一个负数,位置是第 " << found << " 个" << endl;
else
cout << "没有负数" << endl;
return 0;
}
看到什么算成功:输出 找到第一个负数,位置是第 3 个(-2 在第三位)。删掉 break 会怎样?found 会被后来的 -9 覆盖成 5——break 保住了"第一个"这个语义,也省下了剩下两圈的比较。
为什么用 break 而不是把条件塞进 for:可以写成 for (int i = 0; i < 5 && nums[i] >= 0; i++)(循环条件里带"还没找到"),但"找东西"的判断写在体内更直白——条件写"要不要继续",体内的 if 写"找到没"。
三、常见误区
- "break 会连循环外的代码一起跳过"——不会。break 只终止包含它的那个循环,循环之后的语句照常执行。
- "break 能跳多层嵌套"——不能,只跳出最内层(4.5 的"就近配对"精神)。要一次跳出两层,得用标志变量或在 5.3.4 的 goto 里权衡(不推荐)。
- "break 写在 if 外面也无妨"——
break不在任何条件分支里 = 循环只跑一圈就退;只在确定"立刻收工"时才这么写。
自测三问(点开对答案)
1. break 执行后本圈剩下的语句会执行吗?——不会;剩余语句、更新、再判条件全跳过,直接出循环。 2. 实例04 删掉 break 会怎样?——found 被后面的 -9 覆盖成 5,"第一个"的语义丢掉。 3. 嵌套里 break 跳几层?——只跳最内层一层;要跳多层需标志变量或 goto(不推荐)。- ☐ 5.3.3 continue 语句(下一节)
相关笔记
- continue 语句 —— 只跳本轮的那个开关
- for循环的变体 ——
for(;;)的自备出口 - switch语句 —— break 的第一次登场
- 🔷 C++基础 · 索引 —— 全课路线图