核心思想
无论是 while 还是 do-while,它们的核心目的都是重复执行一段代码,直到某个条件不再满足为止。

(图片来源网络,侵删)
while 循环
while 循环是“先判断,后执行”的循环,也就是说,它会先检查循环条件,如果条件为真(true),才会执行循环体中的代码,如果一开始条件就为假,那么循环体一次都不会执行。
语法结构
while (条件表达式) {
// 循环体
// 当条件表达式为真时,这里面的代码会被重复执行
}
工作流程
- 计算条件表达式。
- 判断结果:
- 如果结果为真(非零),则执行循环体内的代码。
- 如果结果为假(0),则跳过整个
while循环,继续执行循环后面的代码。
- 执行循环体后,程序会跳回第1步,重新计算条件表达式,然后重复这个过程,直到条件为假。
示例:打印 1 到 5
#include <stdio.h>
int main() {
int i = 1; // 1. 初始化循环变量
// 2. 检查循环条件
while (i <= 5) {
// 3. 执行循环体
printf("%d ", i); // 输出 1 2 3 4 5
// 4. 更新循环变量(非常重要!)
i++; // 如果没有这一句,i 永远小于等于 5,就会造成“死循环”
}
printf("\n循环结束,\n");
return 0;
}
while 循环的特点
- 入口条件循环:在每次循环开始前检查条件。
- 可能执行零次:如果初始条件不满足,循环体一次都不会执行,这在某些情况下非常有用,比如当数据为空时,就不需要处理了。
do-while 循环
do-while 循环是“先执行,后判断”的循环,它会先执行一次循环体,然后再检查循环条件,如果条件为真,就继续执行循环体,否则结束循环。
这意味着,do-while 循环至少会执行一次循环体,无论初始条件是什么。
语法结构
do {
// 循环体
// 这里的代码至少会被执行一次
} while (条件表达式); // 注意:这里的分号 ; 不能少!
工作流程
- 无条件执行一次
do { ... }之间的循环体代码。 - 计算条件表达式。
- 判断结果:
- 如果结果为真(非零),则程序跳回第1步,继续执行循环体。
- 如果结果为假(0),则结束
do-while循环,继续执行循环后面的代码。
示例:确保用户输入一个正数
#include <stdio.h>
int main() {
int number;
// 至少会执行一次,提示用户输入
do {
printf("请输入一个正数: ");
scanf("%d", &number);
// 如果用户输入了负数或零,这里会打印提示
if (number <= 0) {
printf("输入无效,请重新输入!\n");
}
} while (number <= 0); // 只要输入的数不是正数,就继续循环
printf("您输入的正数是: %d\n", number);
return 0;
}
do-while 循环的特点
- 出口条件循环:在每次循环结束后检查条件。
- 至少执行一次:循环体代码保证会执行一次,这在需要先执行某些操作,再根据结果决定是否继续的场景中非常有用,比如上面的输入验证例子。
while vs do-while 核心区别总结
| 特性 | while 循环 |
do-while 循环 |
|---|---|---|
| 执行顺序 | 先判断,后执行 | 先执行,后判断 |
| 执行次数 | 可能执行 0 次(如果条件一开始就为假) | 至少执行 1 次 |
| 语法结构 | while (条件) { ... } |
do { ... } while (条件); |
| 适用场景 | 当循环体可能不需要执行时,遍历一个可能为空的列表。 | 当循环体必须至少执行一次时,菜单选择、输入验证。 |
如何选择使用哪个?
这是一个非常常见的问题,一个简单的判断法是:

(图片来源网络,侵删)
问自己一个问题:“这段代码是否有可能一次都不执行?”
- 如果答案是“是”,那么应该使用
while循环。- 例子:遍历一个文件中的所有行,如果文件是空的,一行都不需要处理。
- 如果答案是“否”,代码无论如何都必须先执行一次,那么应该使用
do-while循环。- 例子:显示一个主菜单,并等待用户选择,无论用户选什么,菜单都必须先显示出来。
容易出错的地方
- 忘记更新循环变量:在
while循环中,如果忘记在循环体内更新循环控制变量(如i++),条件将永远为真,导致无限循环。 do-while循环末尾的分号:do-while的while(条件)后面必须有一个分号 ,这是一个非常常见的语法错误,编译器通常会提示。- 混淆 和 :在循环条件中,
if (i = 5)是一个赋值语句,它会把 5 赋给i,并且表达式的值是 5(真),导致无限循环,正确的写法是if (i == 5),用于判断是否相等。
练习
试着写一下,用 while 和 do-while 分别实现以下功能:
- 从 10 倒数到 1。
- 提示:使用
while很自然,用do-while也可以,但i的初始值需要是 10。
- 提示:使用
- 实现一个简单的计算器,可以不断让用户输入数字进行运算,直到用户输入 'q' 退出。
- 提示:这个逻辑天然适合
do-while,因为菜单和计算逻辑至少要执行一次。
- 提示:这个逻辑天然适合
希望这个详细的解释能帮助你完全理解 while 和 do-while 循环!

(图片来源网络,侵删)
