while——让一段代码反复执行,直到某个条件不再成立。
重点理解循环变量的三个动作:初始化、判断、更新,
以及最常见的 bug——死循环,怎么发生、怎么避免。
while——让一段代码反复执行,直到某个条件不再成立。
重点理解循环变量的三个动作:初始化、判断、更新,
以及最常见的 bug——死循环,怎么发生、怎么避免。
前七讲的程序都是从头跑到尾,每一行最多执行一次。
但如果要打印 100 次"你好",难道要写 100 行 std::cout 吗?
循环就是用来打破这条规则的:让一段代码反复执行, 直到满足某个条件为止。
和 if 长得很像:圆括号里是条件(一个 bool 值),
大括号里是要重复执行的代码——叫循环体。
不同的是执行流程:判断条件 → 为 true 就执行循环体 →
执行完回到判断条件 → 一直重复,直到条件变成 false。
Python:冒号 + 缩进,+= 自增
count = 1
while count <= 5:
print(count)
count += 1
C++:圆括号 + 大括号,++ 自增
int count = 1;
while (count <= 5) {
std::cout << count;
count++;
}
#include <iostream>
int main() {
int count = 1;
while (count <= 5) {
std::cout << count << std::endl;
count++;
}
std::cout << "循环结束" << std::endl;
return 0;
} ++——"在 C 的基础上加一"。
今天它第一次正式出场:count++ 是 count = count + 1 的简写,
叫自增。
上面的 count_up.cpp 里,count 就是循环变量,它做了三件事:
| 动作 | 代码 | 位置 |
|---|---|---|
| 初始化 | int count = 1; | 循环之前,只做一次 |
| 判断 | count <= 5 | 每次循环开始前都检查 |
| 更新 | count++; | 循环体的最后 |
三者缺一不可:少了初始化,条件用的是未知值;少了更新,条件永远不变。
把 count++; 删掉,条件 count <= 5 永远成立:
int count = 1;
while (count <= 5) {
std::cout << count << std::endl;
// 忘记写 count++
}
// count 永远是 1,条件永远成立——程序会一直打印 1,停不下来
程序会不停地打印 1,永远不会执行到 return 0;。
这就是死循环。
把上面 infinite_loop.cpp 补成完整程序并运行——你会看到屏幕被
1 刷屏,程序停不下来。
Ctrl+C),强制结束程序count++;,再运行一次,对比两者的区别false 吗?
想不清楚这两个问题,先别急着运行。
count_up.cpp 打印 1 到 5,其实循环次数是确定的——写代码时就知道是 5 次。
这种场景下节课学的 for 会更合适。
while 真正的强项是:循环次数取决于运行时才知道的信息,
比如"用户会输入几次错误的数据"——程序员自己都不知道答案。
#include <iostream>
int main() {
int n;
std::cout << "请输入一个正整数:";
std::cin >> n;
while (n <= 0) {
std::cout << "输入无效,请重新输入一个正整数:";
std::cin >> n;
}
std::cout << "你输入的是:" << n << std::endl;
return 0;
} 5,n <= 0 是 false,
循环体一次都不执行。如果输入了三次负数才输入对,循环体就执行三次。
到底几次?运行前谁也不知道。
读入一个整数,要求必须在 1 ~ 100 之间;如果不在范围内,
就提示并要求重新输入,直到合法为止。
提示:循环条件要表达"不在 1~100 之间",回忆第 6 讲的 && 和 !。
反复读入整数并累加,直到用户输入 0 为止,最后输出累加的总和(不包括 0 本身)。
提示:你需要三个变量:
sum,初始为 0xx != 0x 在进入 while 之前需要先读入一次——
这和 input_validation.cpp 里 cin >> n 写在 while 前面是同一个道理。
| 能力 | 用到的工具 |
|---|---|
| 让代码反复执行 | while (条件) { } |
| 控制循环的节奏 | 初始化 / 判断 / 更新 |
| 自增 | count++ |
| 识别并避免死循环 | 确认更新会让条件变 false |
最该记住:写 while 前先想清楚初始化、判断、更新这三步;
最该警惕:忘记更新或更新方向写反,都会导致死循环。
for 循环,把这种场景写得更简洁,
还会学 break / continue 来提前跳出或跳过本次循环。