C语言do-while循环和while循环有何区别?

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

do-while 循环是 C 语言中三种基本循环结构(forwhiledo-while)之一,它的核心特点是 “先执行,后判断”,这意味着循环体内的代码至少会执行一次。

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

语法结构

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

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

语法要点:

  1. do: 这是循环的起始关键字。
  2. 花括号用于包裹循环体内的所有语句,即使循环体只有一条语句,也强烈建议使用花括号,以增加代码的可读性和避免错误。
  3. while (表达式): 这是循环的判断部分。
    • 表达式通常是一个关系表达式或逻辑表达式(i < 10)。
    • 关键点:在 do-while 循环中,这个判断是在 循环体执行完毕之后 才进行的。
    • 如果表达式的结果为 真(非零),则程序会跳回 do 关键字处,再次执行循环体。
    • 如果表达式的结果为 假(零),则循环结束,程序继续执行 while 语句后面的代码。
  4. 分号 : while (表达式) 后面的分号 绝对不能忘记!这是 do-while 循环区别于 while 循环的一个显著语法特征。

执行流程

我们可以通过一个流程图来理解它的执行逻辑:

graph TD
    A[开始] --> B[执行 do 后面的循环体];
    B --> C{判断 while(表达式) 的结果};
    C -- 为真 (非0) --> B;
    C -- 为假 (0) --> D[循环结束, 执行后续代码];
    D --> E[结束];

流程总结:

c语言 do while循环
(图片来源网络,侵删)
  1. 执行:无条件执行一次 do { ... } 中的循环体。
  2. 判断:计算 while (表达式) 的值。
  3. 循环:如果值为真,返回步骤 1,继续执行循环体。
  4. 退出:如果值为假,循环终止,程序执行 while 语句后面的下一条语句。

while 循环的关键区别

这是理解 do-while 循环最核心的部分。

特性 while 循环 do-while 循环
执行顺序 先判断,后执行 先执行,后判断
首次执行 如果第一次判断条件为假,循环体一次都不会执行。 循环体至少会执行一次,无论条件初始值是什么。
语法结尾 while (expression) 没有分号 while (expression); 必须有分号

简单记忆:

  • while:像一个严格的门卫,进门前要先检查你的票(条件),没票就不让你进。
  • do-while:像一个热情的店家,先进来尝一口(执行一次),吃完后你再决定要不要付钱(判断条件)。

示例代码

示例 1:基本的 do-while 循环

这个例子会打印从 1 到 5 的数字。

#include <stdio.h>
int main() {
    int i = 1;
    printf("do-while 循环开始:\n");
    do {
        printf("i = %d\n", i);
        i++; // i 自增
    } while (i <= 5);
    printf("do-while 循环结束,\n");
    return 0;
}

输出:

c语言 do while循环
(图片来源网络,侵删)
do-while 循环开始:
i = 1
i = 2
i = 3
i = 4
i = 5
do-while 循环结束。

分析:

  1. i 初始为 1。
  2. 第一次循环:直接进入 do 块,打印 i = 1i 变为 2,接着判断 while (i <= 5),即 2 <= 5,为真,继续循环。
  3. 后续循环:重复执行,打印 2, 3, 4, 5,每次 i 都会自增。
  4. 当 i = 6 时:打印完 i = 5 后,i 变为 6,判断 while (6 <= 5),为假,循环结束。

示例 2:至少执行一次的场景

这个例子展示了 do-while 循环的“至少执行一次”的特性,我们要求用户输入一个密码,只要不正确就要求重新输入。

#include <stdio.h>
int main() {
    int password;
    do {
        printf("请输入密码 (提示: 1234): ");
        scanf("%d", &password);
    } while (password != 1234);
    printf("密码正确!欢迎进入系统,\n");
    return 0;
}

运行过程模拟:

  • 用户第一次输入 1111
    1. 程序直接进入 do 块,提示输入密码。
    2. 用户输入 1111
    3. 判断 while (1111 != 1234),为真,循环继续。
  • 用户第二次输入 5678
    1. 再次进入 do 块,提示输入密码。
    2. 用户输入 5678
    3. 判断 while (5678 != 1234),为真,循环继续。
  • 用户第三次输入 1234
    1. 再次进入 do 块,提示输入密码。
    2. 用户输入 1234
    3. 判断 while (1234 != 1234),为假,循环结束。
    4. 程序执行下一条语句,打印 "密码正确!..."。

关键点:即使你第一次就输入了正确的密码,do 块里的 printfscanf必须先执行一次,然后才会去判断密码是否正确,这是 do-while 在这个场景下的必然行为。


适用场景

do-while 循环非常适合以下情况:

  1. 菜单驱动程序:显示一个菜单,然后等待用户选择,无论用户是否第一次就按了退出键,菜单都必须至少显示一次。

    do {
        printf("\n===== 主菜单 =====\n");
        printf("1. 查看信息\n");
        printf("2. 修改设置\n");
        printf("3. 退出\n");
        printf("请输入您的选择: ");
        scanf("%d", &choice);
    } while (choice != 3);
  2. 输入验证:确保用户输入了有效数据,要求用户输入一个正数,如果输入了负数或零,则要求重新输入。

    int number;
    do {
        printf("请输入一个正数: ");
        scanf("%d", &number);
        if (number <= 0) {
            printf("输入无效,请重新输入!\n");
        }
    } while (number <= 0);
    printf("您输入的有效数字是: %d\n", number);
  3. 需要至少执行一次的任务:任何“先做一次,然后根据结果决定是否继续”的场景。


特性 描述
核心思想 先执行,后判断。
最少执行次数 1 次
语法结构 do { ... } while (expression);
while 的区别 while 可能一次都不执行,do-while 至少执行一次。do-whilewhile 后面有分号。
优点 适用于需要保证循环体至少执行一次的场景,代码逻辑清晰。
缺点 如果不小心,可能会导致无限循环,因为条件判断在最后。

掌握 do-while 循环,并理解它与 while 循环的根本区别,是编写健壮、高效 C 语言程序的重要一环。

-- 展开阅读全文 --
头像
dede文章标题如何添加随机值?
« 上一篇 02-13
织梦CMS Space是什么?如何使用?
下一篇 » 02-13

相关文章

取消
微信二维码
支付宝二维码

目录[+]