C++ while 与 do-while 循环:重复控制流完全掌握
C++ while 与 do-while 循环完全指南
深度解析 while 与 do-while 循环:语法、流程图、实战示例、无限循环陷阱与 for/while 选型指南。
循环是高效编程基石:避免代码重复。选择正确循环类型关乎代码可读性与可维护性。
C++ 三大循环:
for循环 —— 迭代次数已知时首选while循环 —— 条件为真持续执行do...while循环 —— 至少执行一次再判断条件
for 循环已在前文讲解,本文聚焦 while 与 do...while。
while 循环
语法:
while (condition) {
// 循环体
}
执行流程:
- 先判断
condition true→ 执行循环体- 体执行完 → 重新判断
false→ 退出循环
关系/逻辑运算符详见 C++ 关系与逻辑运算符。
while 循环流程图

示例 1:打印 1 到 5
#include <iostream>
using namespace std;
int main() {
int i = 1;
while (i <= 5) {
cout << i << " ";
++i;
}
return 0;
}
输出
1 2 3 4 5
逐步执行表:
| 迭代 | 变量 | i <= 5 | 动作 |
|---|---|---|---|
| 1 | i=1 | true | 打印 1,i→2 |
| 2 | i=2 | true | 打印 2,i→3 |
| 3 | i=3 | true | 打印 3,i→4 |
| 4 | i=4 | true | 打印 4,i→5 |
| 5 | i=5 | true | 打印 5,i→6 |
| 6 | i=6 | false | 循环终止 |
示例 2:累加非负整数(负数终止)
#include <iostream>
using namespace std;
int main() {
int number, sum = 0;
cout << "Enter a number: ";
cin >> number;
while (number >= 0) {
sum += number;
cout << "Enter a number: ";
cin >> number;
}
cout << "\nThe sum is " << sum << endl;
return 0;
}
输出
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
持续读取非负数累加,负数结束循环。
do...while 循环
关键差异:先执行循环体,后判断条件,保证至少执行一次。
语法:
do {
// 循环体
} while (condition);
执行流程:
- 执行循环体
- 判断
condition true→ 重复false→ 退出
do...while 流程图

示例 3:打印 1 到 5
#include <iostream>
using namespace std;
int main() {
int i = 1;
do {
cout << i << " ";
++i;
} while (i <= 5);
return 0;
}
输出
1 2 3 4 5
执行步骤:
| 迭代 | 变量 | i <= 5 | 动作 |
|---|---|---|---|
| 初始 | i=1 | 未检查 | 打印 1,i→2 |
| 1 | i=2 | true | 打印 2,i→3 |
| 2 | i=3 | true | 打印 3,i→4 |
| 3 | i=4 | true | 打印 4,i→5 |
| 4 | i=5 | true | 打印 5,i→6 |
| 5 | i=6 | false | 循环终止 |
示例 4:累加非负整数(do-while 版)
#include <iostream>
using namespace std;
int main() {
int number = 0, sum = 0;
do {
sum += number;
cout << "Enter a number: ";
cin >> number;
} while (number >= 0);
cout << "\nThe sum is " << sum << endl;
return 0;
}
输出 1
Enter a number: 6 Enter a number: 12 Enter a number: 7 Enter a number: 0 Enter a number: -2 The sum is 25
输出 2(首次输入负数)
Enter a number: -6 The sum is 0.
首次输入负数时,循环仍执行一次(加了初始值 0),然后退出。
无限循环
条件永不为假导致的无限循环:
// 无限 while
while (true) { /* ... */ }
// 无限 do-while
int count = 1;
do { /* ... */ } while (count == 1);
有意无限循环用于服务器/事件循环;无意则是逻辑 Bug,会耗尽资源直到程序被杀。
for vs while 选型指南
| 场景 | 推荐循环 | 理由 |
|---|---|---|
| 迭代次数编译期/运行期初始已知 | for | 三段式集中管理初始化/条件/更新,意图最清晰 |
| 次数依赖运行时动态条件(用户输入、文件读取、网络响应) | while | 条件检查在前,语义匹配“满足条件才执行” |
| 循环体必须至少执行一次(菜单交互、首次读取后处理) | do...while | 后置条件保证首次执行 |
| 范围遍历(数组、STL 容器) | 范围-based for | 零索引管理,防越界,现代 C++ 首选 |
延伸练习
C语言
- 掌握 C# 条件逻辑:if、if-else、if-else if 与嵌套 if 语句完全指南
- 掌握 C# while 与 do-while 循环:语法、示例与最佳实践
- C++类与对象:面向对象编程实战指南
- C++ 动态内存管理:new 与 delete 专家级实战指南
- C++ 三种继承方式深度解析:public、protected 与 private
- C++ 友元函数与友元类:突破访问控制的利器
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- while 与 do-while 循环深度对比:原理、语法与实战案例全解析
- C++日期时间完全指南:ctime库、tm结构体与格式化输出
- C++重载机制深度解析:函数重载与运算符重载全攻略
- C++文件I/O完全指南:fstream读写、打开模式、定位指针与完整实例
- Java 回文数判断:while 循环与 for 循环两种算法实现