🔷 第五章 循环语句
📄 一句话概括

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 写"找到没"。

三、常见误区

  1. "break 会连循环外的代码一起跳过"——不会。break 只终止包含它的那个循环,循环之后的语句照常执行。
  2. "break 能跳多层嵌套"——不能,只跳出最内层(4.5 的"就近配对"精神)。要一次跳出两层,得用标志变量或在 5.3.4 的 goto 里权衡(不推荐)。
  3. "break 写在 if 外面也无妨"——break 不在任何条件分支里 = 循环只跑一圈就退;只在确定"立刻收工"时才这么写。
自测三问(点开对答案) 1. break 执行后本圈剩下的语句会执行吗?——不会;剩余语句、更新、再判条件全跳过,直接出循环。 2. 实例04 删掉 break 会怎样?——found 被后面的 -9 覆盖成 5,"第一个"的语义丢掉。 3. 嵌套里 break 跳几层?——只跳最内层一层;要跳多层需标志变量或 goto(不推荐)。

相关笔记