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

continue; —— 跳过本轮剩余语句,直接去更新、再判断,下一圈照常跑。和 break 的差别一句话:break 是收工,continue 是本圈告假。实例05 用它"这圈数据不合格就不处理";但它在 while 里很危险——跳过体的末尾就跳过更新,容易死循环。

📝 本节和前面几节的关系

5.3.2 的 break 是"断电开关",本篇的 continue 是"跳过开关"——两个开关管的东西不同,别混。它跟 if 配对的形态也和 break 一样:条件一到,跳过;区别只在跳去哪里。

一、continue 干了什么:跳过本圈,回更新

for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) continue;   // 偶数:这圈不打印
    cout << i << " ";
}

输出:1 3 5 7 9。偶数圈被 continue 掐掉"打印"这一步,但 i++ 照旧执行、条件照旧判断——所以循环该跑 10 圈还是 10 圈,只是偶数的活儿没干。

break(5.3.2) continue
跳出范围 整个循环 只本圈剩余语句
更新与判断 也跳过 照旧执行
出循环后 循环结束 继续下一圈
语气 收工 本圈告假

二、实例 05:使用 continue 语句跳出循环

任务:统计一串成绩里及格的平均分——不及格的跳过不参与计算。

#include <iostream>
using namespace std;

int main() {
    int score;
    int sum = 0, count = 0;

    cout << "输入 5 个成绩(0~100,负数结束):" << endl;
    for (int i = 0; i < 5; i++) {
        cout << "第 " << i + 1 << " 个:";
        cin >> score;
        if (score < 0) break;            // 输入负数:直接收工(break)
        if (score < 60) continue;        // 不及格:本圈不统计(continue)

        sum += score;                    // 及格才走到这里
        count++;
    }

    if (count > 0)
        cout << "及格 " << count << " 人,平均 " << (double)sum / count << " 分" << endl;
    else
        cout << "没有及格成绩" << endl;
    return 0;
}

看到什么算成功:输入 90 45 80 -1 → 前三个处理:90 及格、45 跳过、80 及格,然后 -1 收工 → 输出 及格 2 人,平均 85 分。这四行代码把 break 和 continue 都用上了,对照着读最能分清两者。

用 if-else 等价改写的思考:if (score >= 60) { sum += score; count++; } 一行也能办——continue 的价值不是"不可替代",而是"先排掉不合格的,再写主流程"这种读起来更顺的写法(称为卫语句风格)。

三、常见误区

  1. "continue 和 break 一样会出循环"——continue 不出循环,只是本圈提前结束;搞混这两个,逻辑全反(把"跳过"当成"停"会把后续数据全丢)。
  2. "while 里随便用 continue"——最容易死循环的一处:while (i <= 10) { if (...) continue; i++; } 里 continue 跳过了 i++,i 不变 → 条件恒真 → 死循环。while 里想让 continue 时,先确保更新在 continue 之前。
  3. "循环末尾的 continue 有意义"——体内末尾的 continue 后面没语句,等于什么都没跳;continue 只用在一段逻辑之前,把"不合格的"提前挡掉。
自测三问(点开对答案) 1. continue 会跳过更新吗?——for 里不会(更新在括号里);while 里会(更新在体内末尾),这是死循环高发点。 2. 实例05 里 45 分是怎么被处理的?——没走到 `sum += score`,被 continue 挡在统计之外。 3. 什么时候该用 continue 而不是 if-else?——想"先排掉不合格、再写主流程"时,读起来更顺(卫语句风格)。

相关笔记