C++ 的 while 循环详解
一句话:while 循环在条件为真时重复执行循环体,每圈之前检查。它是"我还不知道要循环几次"的循环 — 其他场合都是换了马甲的 for。
while 循环有三个组成部分,只有第一个写进语法:
- 条件 — 每圈前检查;为假即结束。
- 循环体 — 干活的部分。
- 更新 — 循环体里必须有东西推动世界走向"条件变假"。忘了它就是死循环。
倒计时:最简示例
#include <iostream>
using namespace std;
int main() {
int n = 5;
while (n > 0) {
cout << n << " ";
n--; // 更新 — 删掉它就永远循环
}
cout << endl;
return 0;
}
闪光的场合 #1:啃数字
不知道一个数有几位时,for 别扭、while 自然。下面求 12345 的各位和(数字之和题的完整模式):
#include <iostream>
using namespace std;
int main() {
int n = 12345;
int sum = 0;
while (n > 0) {
sum += n % 10; // 末位
n /= 10; // 切掉它 — 为什么 12345/10 是 1234,
// 见整数除法指南
}
cout << sum << endl; // 15
return 0;
}
闪光的场合 #2:读到哨兵为止
读数字直到用户输入 0。次数未知 — while 的地盘(数字放输入框):
#include <iostream>
using namespace std;
int main() {
int x, sum = 0;
cin >> x;
while (x != 0) {
sum += x;
cin >> x; // 在循环里面再读
}
cout << "sum = " << sum << endl;
return 0;
}
更漂亮的变体直接拿"读取"本身当条件 — cin >> x 求值为流对象,读取持续成功时它就是真,于是循环在输入结束或读坏时停下:
#include <iostream>
using namespace std;
int main() {
int x, sum = 0;
while (cin >> x) { // 读取成功就一直循环
sum += x;
}
cout << "sum = " << sum << endl;
return 0;
}
死循环解剖
int n = 5;
while (n > 0) {
cout << n << " ";
// 忘了 n--; → 条件永远为真
}
三种经典成因:没更新;更新跳过了出口(n-- 从 5 出发却测 n == 0);读取发生在循环外。在本站,失控循环会卡死浏览器标签页(代码在你设备上跑)— 点运行前检查一眼更新那一行。break; 是紧急出口,但只能靠 break 逃出去的循环通常是设计问题。
常见新手 bug
- 条件后跟分号:
while (n > 0);— 那个;是空循环体;循环要么狂转要么什么都不干。 - 条件差一:
>vs>=。拿个小输入手推一圈。 - 更新错了变量 — 测
n却切copy,或反过来。
while 相关面试题
- "什么时候选 while 不选 for?" — 事先不知道迭代次数:哨兵读入、数字处理、等待条件。
- "
while (cin >> x)什么意思?" — 读取持续成功时流为真;输入结束或非法输入结束循环。 - "while 和 do-while 的区别?" — do-while 在循环体之后查条件,所以至少跑一次(菜单、输入校验)。
- "怎么调试死循环?" — 每圈打印循环变量;那个永远不动的变量就是你缺的更新。
练起来
题库里这些是 while 的主场:数一数位数、数字之和、素数判断。配套阅读:for 与 while 并排对比。