← 课程目录
第 8 讲 模块三:让程序重复执行

while 循环

8 / 24
💡
本节课目标
学习第一种循环结构 while——让一段代码反复执行,直到某个条件不再成立。 重点理解循环变量的三个动作:初始化、判断、更新, 以及最常见的 bug——死循环,怎么发生、怎么避免。
开场

重复的代码,重复的烦恼

📖 理论讲解

如果要打印 100 次……

前七讲的程序都是从头跑到尾,每一行最多执行一次。 但如果要打印 100 次"你好",难道要写 100 行 std::cout 吗?

循环就是用来打破这条规则的:让一段代码反复执行, 直到满足某个条件为止。

第一段

while:条件成立就继续

📖 理论讲解

语法:while (条件) { 循环体 }

if 长得很像:圆括号里是条件(一个 bool 值), 大括号里是要重复执行的代码——叫循环体

不同的是执行流程:判断条件 → 为 true 就执行循环体 → 执行完回到判断条件 → 一直重复,直到条件变成 false

Python

Python:冒号 + 缩进,+= 自增

count = 1

while count <= 5:

print(count)

count += 1

VS
C++

C++:圆括号 + 大括号,++ 自增

int count = 1;

while (count <= 5) {

std::cout << count;

count++;

}

count_up.cpp CPP
#include <iostream>

int main() {
    int count = 1;
    while (count <= 5) {
        std::cout << count << std::endl;
        count++;
    }
    std::cout << "循环结束" << std::endl;
    return 0;
}
++ 终于登场
第 1 讲提到过:C++ 这个名字本身就来自 ++——"在 C 的基础上加一"。 今天它第一次正式出场:count++count = count + 1 的简写, 叫自增
第二段

循环变量的三个动作

📖 理论讲解

初始化 → 判断 → 更新

上面的 count_up.cpp 里,count 就是循环变量,它做了三件事:

动作代码位置
初始化int count = 1;循环之前,只做一次
判断count <= 5每次循环开始前都检查
更新count++;循环体的最后

三者缺一不可:少了初始化,条件用的是未知值;少了更新,条件永远不变。

第三段

死循环:程序卡住了

⚠️
忘记更新会怎样?

count++; 删掉,条件 count <= 5 永远成立:

infinite_loop.cpp CPP
int count = 1;
while (count <= 5) {
    std::cout << count << std::endl;
    // 忘记写 count++
}
// count 永远是 1,条件永远成立——程序会一直打印 1,停不下来

程序会不停地打印 1永远不会执行到 return 0;。 这就是死循环

⚡ 动手实操 约 5 分钟

亲手体验一次死循环

把上面 infinite_loop.cpp 补成完整程序并运行——你会看到屏幕被 1 刷屏,程序停不下来。

  1. 在 CLion 里点红色的 Stop 按钮(终端里是 Ctrl+C),强制结束程序
  2. 加回 count++;,再运行一次,对比两者的区别
写 while 前先问自己
循环变量每次怎么变化?这种变化最终会让条件变成 false 吗? 想不清楚这两个问题,先别急着运行。
第四段

while 真正的用场:不知道要循环几次

📖 理论讲解

次数确定 vs 次数不确定

count_up.cpp 打印 1 到 5,其实循环次数是确定的——写代码时就知道是 5 次。 这种场景下节课学的 for 会更合适。

while 真正的强项是:循环次数取决于运行时才知道的信息, 比如"用户会输入几次错误的数据"——程序员自己都不知道答案。

input_validation.cpp CPP
#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;
}
💡
读一下执行流程
如果用户第一次就输入 5n <= 0false, 循环体一次都不执行。如果输入了三次负数才输入对,循环体就执行三次。 到底几次?运行前谁也不知道。
实战

动手写两个循环

练习 8-1

范围校验输入

读入一个整数,要求必须在 1 ~ 100 之间;如果不在范围内, 就提示并要求重新输入,直到合法为止。

提示:循环条件要表达"不在 1~100 之间",回忆第 6 讲的 &&!

练习 8-2

累加器:输入 0 结束

反复读入整数并累加,直到用户输入 0 为止,最后输出累加的总和(不包括 0 本身)。

提示:你需要三个变量:

  • 累加的总和 sum,初始为 0
  • 每次读入的数 x
  • 循环条件:x != 0
💡
想一想
为了让循环条件第一次就能正确判断,x 在进入 while 之前需要先读入一次—— 这和 input_validation.cppcin >> n 写在 while 前面是同一个道理。
收尾

小结

📖 理论讲解

这节课你掌握了

能力用到的工具
让代码反复执行while (条件) { }
控制循环的节奏初始化 / 判断 / 更新
自增count++
识别并避免死循环确认更新会让条件变 false

最该记住:写 while 前先想清楚初始化、判断、更新这三步; 最该警惕:忘记更新或更新方向写反,都会导致死循环

💡
下节课预告
这节课的例子,循环次数都取决于数据。但很多场景循环次数是写代码时就定死的—— 比如"正好循环 10 次"。下节课学 for 循环,把这种场景写得更简洁, 还会学 break / continue 来提前跳出或跳过本次循环。