C语言中do while与while循环的核心区别是什么?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文

do-while 循环是 C 语言中三种基本的循环结构之一(另外两种是 for 循环和 while 循环),它的特点是 “先执行,后判断”,也就是说,循环体内的代码至少会被执行一次。

c语言中的do while
(图片来源网络,侵删)

语法结构

do-while 循环的语法格式如下:

do {
    // 循环体(需要重复执行的代码)
} while (表达式);

语法要点:

  1. do:是循环的起始关键字。
  2. 花括号内是循环体,包含一条或多条需要重复执行的语句,如果循环体只有一条语句,可以省略花括号,但为了代码清晰和避免错误,强烈建议始终使用花括号。
  3. while (表达式):这是循环的判断部分。
    • 表达式通常是一个关系表达式或逻辑表达式(i < 10)。
    • 这个表达式在循环体执行完毕后才会被计算。
    • 如果表达式的结果为 真(非零),则循环继续,程序会跳回 do 关键字处,再次执行循环体。
    • 如果表达式的结果为 假(零),则循环终止,程序继续执行 while 语句后面的代码。
  4. 分号 while (表达式) 后面必须有一个分号,这是 do-while 循环区别于 while 循环的一个关键语法特征,很多初学者会忘记这个分号,导致编译错误。

执行流程

do-while 循环的执行流程可以用以下步骤来描述:

  1. 执行:执行 do 和 之间的循环体代码。
  2. 判断:执行完循环体后,计算 while 后面的表达式的值。
  3. 决策
    • 如果表达式为 ,程序流程跳转回第 1 步,继续执行循环体。
    • 如果表达式为 ,循环结束,程序流程跳转到 do-while 循环结构之后的下一条语句继续执行。

流程图:

c语言中的do while
(图片来源网络,侵删)
graph TD
    A[开始] --> B{执行 do 循环体};
    B --> C{计算 while(表达式)};
    C -- 表达式为真 --> B;
    C -- 表达式为假 --> D[结束循环, 执行后续代码];
    D --> E[程序结束];

while 循环的关键区别

这是理解 do-while 的核心:

特性 while 循环 do-while 循环
执行顺序 先判断,后执行 先执行,后判断
首次执行 如果第一次判断条件就为假,循环体一次都不会执行。 循环体至少会执行一次,无论条件初始值是什么。
语法 while (表达式) { ... } do { ... } while (表达式);

简单总结:

  • while 循环,当你不确定是否需要进入循环时(读取用户输入,如果输入无效则不处理)。
  • do-while 循环,当你知道循环体至少需要执行一次时(显示一个菜单,并等待用户选择,无论用户第一次怎么选,菜单至少要显示一次)。

代码示例

示例1:经典的 do-while 用法(用户输入验证)

这个场景最能体现 do-while 的优势:确保代码至少执行一次。

#include <stdio.h>
int main() {
    int choice;
    // 这个循环会一直显示菜单,直到用户输入 1, 2, 或 3
    do {
        printf("\n请选择一个操作:\n");
        printf("1. 新游戏\n");
        printf("2. 加载存档\n");
        printf("3. 退出\n");
        printf("请输入你的选择 (1-3): ");
        scanf("%d", &choice);
        // 如果输入无效,给出提示
        if (choice < 1 || choice > 3) {
            printf("无效的输入,请重新选择!\n");
        }
    } while (choice < 1 || choice > 3); // 只有当输入有效时,循环才会结束
    printf("你选择了 %d,\n", choice);
    return 0;
}

分析: 无论用户第一次输入的是 05 还是 abc,菜单和提示信息都会先显示一次,程序才会判断输入是否有效,如果无效,循环继续,再次显示菜单,这确保了用户总能看到菜单。

示例2:简单的计数器

#include <stdio.h>
int main() {
    int i = 1;
    int sum = 0;
    // 计算 1 到 5 的和
    do {
        sum += i; // sum = sum + i;
        i++;
        printf("i = %d, sum = %d\n", i, sum);
    } while (i <= 5);
    printf("\n最终的和是: %d\n", sum);
    return 0;
}

输出:

i = 2, sum = 1
i = 3, sum = 3
i = 4, sum = 6
i = 5, sum = 10
i = 6, sum = 15
最终的和是: 15

分析:

  1. i 初始为 1。
  2. 进入 do 块,sum 变为 1,i 变为 2。
  3. 判断 while (i <= 5)2 <= 5 为真,继续循环。
  4. sum 变为 3,i 变为 3。
  5. ...以此类推,直到 i 变为 6。
  6. 判断 while (6 <= 5) 为假,循环结束。

注意事项

  1. 不要忘记分号 while (expression); 末尾的分号是必须的。

    // 正确
    do {
        // code
    } while (i > 0);
    // 错误!编译器会报错
    do {
        // code
    } while (i > 0)  // 缺少分号
  2. 避免无限循环:确保循环条件在某个时刻会变为假,否则会导致无限循环。

    // 危险!这是一个无限循环
    int i = 1;
    do {
        printf("This will run forever!\n");
        // i 没有增加,i <= 10 永远为真
    } while (i <= 10);
  3. 使用括号:即使循环体只有一条语句,也使用花括号 ,这能提高代码的可读性,并防止在后续添加代码时出现逻辑错误。

do-while 循环是 C 语言中一个非常有用的工具,当你需要一段代码保证至少执行一次,然后在满足特定条件时继续重复执行时,do-while 就是最佳选择,它与 while 循环的核心区别在于执行顺序,理解这一点就能在合适的场景下正确地使用它。

-- 展开阅读全文 --
头像
return在C语言中具体作用是什么?
« 上一篇 今天
Windows.h在C语言中如何高效使用?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]