C++ 中 while 与 do...while 循环的用法、技巧与避坑
作者:noipp
一、引言
在 C++ 编程中,循环结构是处理重复性任务的核心工具。while 循环作为最基础的循环结构之一,以其简洁的逻辑和广泛的适用性,成为每个 C++ 开发者必须熟练掌握的知识点。
与 for 循环不同,while 循环更适用于不确定具体循环次数,但知道何时停止的场景。本文将深入剖析 while 循环的语法、变体、常见用法以及需要警惕的陷阱。
二、基础语法
while 循环的语法非常简单,它只关心一个条件:
while (/*条件表达式*/) {
// 循环体:只要条件为真,就反复执行这里的代码
}
执行流程:
- 计算条件表达式的值。
- 如果为
true,执行循环体,然后跳回第 1 步。 - 如果为
false,直接跳出循环,执行后续代码。
注意: 如果条件一开始就为
false,循环体一次都不会执行。
三、第一个例子:打印数字
让我们从一个最简单的例子开始——打印 1 到 5 的数字:
#include <iostream>
using namespace std;
int main() {
int i = 1; // 1. 初始化循环变量
while (i <= 5) { // 2. 循环条件
cout << i << " "; // 3. 循环体
i++; // 4. 更新循环变量,避免死循环
}
// 代码会输出:1 2 3 4 5
return 0;
}要点解析:
- 初始化要在循环前完成。
- 条件检查在每次迭代开始前进行。
- 变量更新必须在循环体内或条件中完成,否则会死循环。
四、while的常见应用场景
4.1 不知道具体循环次数的场景
while 最擅长处理“当某条件满足时就继续”的逻辑,而不是“执行 N 次”。
示例:求用户输入的数字之和,直到输入 0 为止
#include <iostream>
using namespace std;
int main() {
int num, sum = 0;
cin >> num; // 先读取第一个数
while (num != 0) {
sum += num; // 加和
cin >> num; // 继续读取下一个数
}
std::cout << "总和为:" << sum;
return 0;
}4.2 游戏或服务器主循环
游戏引擎、服务器程序通常使用 while 来维持一个持续运行的主循环。
#include <iostream>
using namespace std;
int main() {
bool isRunning = true;
int choice;
while (isRunning) {
cout << "\n--- 菜单 ---\n";
cout << "1. 开始游戏\n";
cout << "2. 设置\n";
cout << "3. 退出\n";
cout << "请选择:\n";
cin >> choice;
if (choice == 3) {
isRunning = false; // 控制循环退出
cout << "再见!" << std::endl;
}
}
return 0;
}4.3 使用迭代器遍历容器
while 可以配合迭代器遍历 STL 容器。
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::vector<int> nums = {10, 20, 30, 40, 50};
auto it = nums.begin(); // 获取起始迭代器
while (it != nums.end()) {
std::cout << *it << " ";
it++; // 移动迭代器
}
// 代码会输出:10 20 30 40 50
return 0;
}五、do...while循环:至少执行一次
当需要先执行一次循环体,再判断条件时,使用 do...while。
do {
// 循环体:无论如何都会先执行一次
} while (/*条件*/);
经典示例:用户输入验证
#include <iostream>
using namespace std;
int main() {
int password;
do {
cout << "请输入密码(1234):";
cin >> password;
if (password != 1234) cout << "密码错误!\n";
} while (password != 1234);
cout << "登录成功!" << std::endl;
return 0;
}这个场景非常适合 do...while,因为必须让用户至少输入一次密码,才能判断对错。
六、常见死循环及预防
死循环是 while 最致命的陷阱,CPU 会占用 100%,程序假死。
6.1 忘记更新循环变量
int i = 0;
while (i < 5) {
cout << i << " ";
// 缺少 i++; -> 死循环!
}
6.2 错误的分号(;)
在 while 条件后误加分号,会导致循环体为空语句。
int i = 0;
while (i < 5); // <-- 致命分号!循环体是空的
{
cout << i << " ";
i++;
}
// 程序卡死,永远进不到花括号里
6.3 有意无限循环
有时我们需要故意制造无限循环,通常会在循环体内用 break 跳出。
while (true) {
// 处理任务
if (exitCondition) break; // 条件满足,跳出循环
}
七、while与for的选择
| 特性 | while | for |
|---|---|---|
| 适用场景 | 循环次数未知,条件驱动 | 循环次数已知,计数驱动 |
| 结构 | 初始化在外部,更新在内部 | 初始化、条件、更新集中在头部 |
| 可读性 | 当逻辑重在某个"状态"时,更直观 | 遍历固定范围时更简洁 |
| 典型用法 | while (exitCondition) | for (int i = 0; i < n; i++) |
建议: 如果你知道要循环 N 次,用 for;如果你知道在某个条件满足前要一直循环,用 while。
八、总结
while循环:先判断,后执行,可能一次都不执行。do...while循环:先执行,后判断,至少执行一次。- 核心要素:务必将初始化、条件、更新三要素牢记于心。
- 防坑指南:警惕分号误放、更新遗漏导致的无尽循环。
掌握了 while 的核心理念,你就能在处理文件读取、用户交互、状态维护等复杂逻辑时,写出行云流水的代码。勤加练习,将它变成你编程肌肉记忆的一部分吧!
到此这篇关于C++ 中 while 与 do...while 循环的完全指南:用法、技巧与避坑的文章就介绍到这了,更多相关C++ while 与 do...while 循环内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
