📄 一句话概括
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 的价值不是"不可替代",而是"先排掉不合格的,再写主流程"这种读起来更顺的写法(称为卫语句风格)。
三、常见误区
- "continue 和 break 一样会出循环"——continue 不出循环,只是本圈提前结束;搞混这两个,逻辑全反(把"跳过"当成"停"会把后续数据全丢)。
- "while 里随便用 continue"——最容易死循环的一处:
while (i <= 10) { if (...) continue; i++; }里 continue 跳过了i++,i 不变 → 条件恒真 → 死循环。while 里想让 continue 时,先确保更新在 continue 之前。 - "循环末尾的 continue 有意义"——体内末尾的 continue 后面没语句,等于什么都没跳;continue 只用在一段逻辑之前,把"不合格的"提前挡掉。
自测三问(点开对答案)
1. continue 会跳过更新吗?——for 里不会(更新在括号里);while 里会(更新在体内末尾),这是死循环高发点。 2. 实例05 里 45 分是怎么被处理的?——没走到 `sum += score`,被 continue 挡在统计之外。 3. 什么时候该用 continue 而不是 if-else?——想"先排掉不合格、再写主流程"时,读起来更顺(卫语句风格)。- ☐ 5.3.4 goto 语句(下一节)
相关笔记
- break 语句 —— 对照读:收工 vs 告假
- 判断语句 —— continue 常配 if 出场
- 🔷 C++基础 · 索引 —— 全课路线图