do-while 循环与 while 恰好相反:先执行一次循环体,再判断条件,因此循环体至少会执行一次。
5.2
do-while 循环与 while 恰好相反:先执行一次循环体,再判断条件,因此循环体至少会执行一次,哪怕条件一开始就是假的。
这两种循环唯一的区别,就是"第一次要不要先判断条件"。这个细节决定了它们各自的适用场景:
一个经典的 do-while 应用场景是"重复要求用户输入,直到输入合法为止":
| 1 | int age; |
| 2 | do |
| 3 | { |
| 4 | cout << "请输入年龄(0~150):"; |
| 5 | cin >> age; // 不管输入是否合法,先读一次 |
| 6 | } while (age < 0 || age > 150); // 不合法就重新循环 |
| 7 | cout << "年龄输入成功:" << age; |
while 写,得先在循环外单独写一次"提示输入"的代码(保证条件判断时变量已经有值),循环体内再重复一遍相同的代码——同样的提示语句要写两遍。do-while 恰好省掉了这次重复。把本节内容汇总成几条最容易踩坑的规则:
do { ... } while (条件); 结尾必须有分号,这是 do-while 独有的语法要求(普通 while 循环结尾不需要分号),漏写会导致编译错误。do-while,会导致代码在这些边界情况下多跑一次,产生不该有的副作用。使用前先确认"至少一次"是不是真的符合业务逻辑。do-while 只会让代码在需要"先判断再执行"的直觉上显得别扭。没有特殊需求时,while 仍然是更常见、更符合直觉的默认选择。