do while语句是c语言中用于实现循环逻辑的一种语句,它的核心特点是循环体至少会执行一次,这和其他先判断条件再执行循环体的循环语句有明显区别。下面我们先通过一张示意图直观了解它的执行流程。

do while语句的基本语法
do while语句的语法结构非常固定,具体格式如下:
do {
// 循环体代码,需要重复执行的语句
} while (循环条件);
这里需要注意几个细节:do是语句的起始关键字,后面紧跟循环体,循环体如果只有一条语句,大括号可以省略,但为了代码可读性和避免逻辑错误,建议始终保留大括号。while关键字后面的括号中是循环条件,条件可以是关系表达式、逻辑表达式或者变量,循环条件后面必须跟一个分号,这是很多初学者容易遗漏的点。
do while语句的执行流程
do while语句的执行步骤可以分为三步:
- 第一步,先执行一次循环体中的所有代码,不管循环条件是否成立,循环体都会先运行一次。
- 第二步,执行完循环体后,判断while后面的循环条件是否成立。
- 第三步,如果循环条件成立,就回到do的位置再次执行循环体,然后再次判断条件,重复这个过程;如果循环条件不成立,就跳出循环,执行循环后面的代码。
do while语句的使用示例
示例1:计算1到100的累加和
我们可以通过do while语句实现1到100的求和,代码如下:
#include <stdio.h>
int main() {
int i = 1;
int sum = 0;
do {
sum += i; // 把当前i的值加到sum中
i++; // i自增1
} while (i <= 100); // 当i小于等于100时继续循环
printf("1到100的累加和是:%dn", sum);
return 0;
}
这段代码中,i初始值为1,先执行一次循环体,sum加上1,i变成2,然后判断i是否小于等于100,成立就继续循环,直到i变成101时条件不成立,跳出循环,最终得到累加和5050。
示例2:实现简单的用户菜单选择
do while非常适合用来实现需要至少展示一次菜单,并且用户可以选择重复操作的场景,比如下面的菜单程序:
#include <stdio.h>
int main() {
int choice;
do {
printf("==== 功能菜单 ====n");
printf("1. 查看用户信息n");
printf("2. 修改用户密码n");
printf("3. 退出程序n");
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("这是用户信息内容n");
break;
case 2:
printf("请输入新密码:n");
break;
case 3:
printf("程序即将退出n");
break;
default:
printf("输入无效,请重新选择n");
}
} while (choice != 3); // 只要用户不选择3,就一直展示菜单
return 0;
}
这个程序会先展示一次菜单,用户选择后根据输入执行对应操作,只要用户不选择3退出,就会一直重复展示菜单等待用户选择,符合do while至少执行一次循环体的特性。
do while和while、for语句的区别
三种循环语句的核心差异在于条件判断的时机:
| 循环语句 | 条件判断时机 | 循环体最少执行次数 |
|---|---|---|
| while | 先判断条件,再执行循环体 | 0次 |
| do while | 先执行循环体,再判断条件 | 1次 |
| for | 先判断条件,再执行循环体 | 0次 |
如果我们需要循环体至少执行一次,就优先选择do while语句,其他场景下可以根据代码简洁度选择while或者for语句。
使用do while的注意事项
- 循环条件如果一开始就为假,do while的循环体依然会执行一次,这是和while语句最大的不同,编写代码时要注意这个特性是否符合需求。
- while后面的分号不能省略,否则会出现语法错误。
- 循环体内要注意修改和循环条件相关的变量,避免出现死循环,比如上面的累加示例中,如果遗漏i++,i永远小于等于100,循环就会一直执行。
do while语句的核心优势是保证了循环体的首次执行,在需要强制先执行一次操作的场景中,使用它可以让代码逻辑更清晰,减少额外的条件判断。