📄 一句话概括
do { 循环体 } while (条件); —— 先跑后验:不管三七二十一先执行一圈,跑完才看条件,真就再来。它和 while 只差"第一次":while 可能一次不跑,do...while 至少跑一次。实例02 用它重算 1 到 10 的累加,结果还是 55——任务相同时两个循环能互换;但"先问再做"的活儿只有它干得顺手。
📝 本节和前面几节的关系
5.1.1 的 while 是"先验后跑",本篇把判断挪到循环体后面,就得到 do...while——三要素一个没少,只换了位置。它还带一个专属记号:末尾分号(while (条件);),这是和 4.2"分号空语句坑"完全不同的两回事——这里必须有分号。
一、do...while 的完整流程
do {
循环体; // 先干一圈
} while (继续条件); // ← 末尾分号必须有
执行顺序:执行 → 判条件 → 真 → 再执行 → … → 假 → 出循环。判断位置从"门口"挪到了"门口外一圈"——所以循环体至少执行一次。
| while(5.1.1) | do...while | |
|---|---|---|
| 判断时机 | 进门前验票 | 上车后补票 |
| 最少执行 | 0 次 | 1 次 |
| 末尾分号 | 不需要 | 必须 |
二、实例 02:用 do...while 计算 1 到 10 的累加结果
#include <iostream>
using namespace std;
int main() {
int i = 1;
int sum = 0;
do {
sum += i; // 先攒一笔
i++; // 更新照旧
} while (i <= 10); // 末尾分号!
cout << "1 到 10 的累加结果是 " << sum << endl;
return 0;
}
看到什么算成功:输出 55——和实例01 一模一样。条件满足时,两个循环完全等价;差别只在初始条件就不满足的时刻(见下面实验)。
三、什么时候必须用它:先问再做的场景
输入校验是最典型用法——总得先收一次输入,才知道对不对:
int score;
do {
cout << "请输入 0~100 的分数:";
cin >> score;
} while (score < 0 || score > 100); // 不合格就重收
cout << "收到:" << score << endl;
看到什么算成功:输入 150 会再问一遍;输入 85 直接通过。逻辑读出来就是大白话:"收一次分数,当不合格时再收一次。"
30 秒实验:把实例02 的 int i = 1; 改成 int i = 99;(初始化就超标)——while 版输出 0(一次不跑),do...while 版输出 99(硬跑了一圈)。"至少一次"不是优惠,是义务:初始值不干净时它会替你"办错事"。
四、常见误区
- "末尾分号可写可不写"——必须写。
do {...} while (条件)没分号直接语法错误;而 4.2 里if (...) ;的分号是"多写才出错"——一个不能少、一个不能多,别混。 - "while 括号后面再加分号"——
} while (条件);的分号已含在写法里,再画蛇添足写成} while (条件); ;倒不至于死循环,但do {...} while (条件)中途写成do {...}; while(...)就拆散了结构。 - "循环体里忘更新"——先跑后验更依赖更新:条件在跑完一圈后才看,不更新照样死循环(而且至少已经错了一圈)。
自测三问(点开对答案)
1. do...while 与 while 的唯一行为差别?——do...while 循环体至少执行 1 次(先跑后验)。 2. `} while (i <= 10);` 末尾的分号漏了会怎样?——语法错误,编译不过。 3. 什么场景非 do...while 不可?——"先做一次再判断"的场景:菜单显示、输入校验。- ☐ 5.2 for循环语句(下一节)
相关笔记
- while 循环 —— 对照着读,差别只有"第一次"
- 节导言 —— 三要素全景
- C++语言中的流 ——
cin失败就罢工,校验循环的另一半理由 - 🔷 C++基础 · 索引 —— 全课路线图