C语言中do while循环的用法与注意事项是什么?

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

do-while 循环是 C 语言中三种基本的循环结构之一(另外两种是 for 循环和 while 循环),它的特点是先执行循环体,然后再判断循环条件,这意味着,无论循环条件初始时是否为真,do-while 循环体内的代码至少会执行一次

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

基本语法

do-while 循环的结构如下:

do {
    // 循环体 (Loop Body)
    // 这里是需要重复执行的代码
} while (condition);

语法要点:

  1. do: 关键字,表示循环的开始。
  2. 花括号,用于包裹循环体内的所有语句,即使循环体只有一条语句,也强烈建议使用花括号,以增强代码的可读性并避免错误。
  3. while (condition): 关键字 while 后面跟着一个括号,括号内是一个条件表达式
  4. 非常重要! do-while 循环的 while 语句末尾必须有一个分号 ,这是它与 while 循环在语法上的一个显著区别。

执行流程

do-while 循环的执行流程非常清晰:

  1. 执行: 首先执行 dowhile 之间的循环体代码。
  2. 判断: 执行完循环体后,计算 while 后面括号内的 condition 条件。
    • condition 的结果为真(非零),则返回步骤 1,继续执行循环体。
    • condition 的结果为假(零),则循环结束,程序继续执行 do-while 循环后面的代码。

流程图:

do while的用法c语言
(图片来源网络,侵删)
graph TD
    A[开始] --> B{执行 do 块内的代码};
    B --> C{判断 while (condition) 条件};
    C -- 条件为真 --> B;
    C -- 条件为假 --> D[结束循环, 执行后续代码];
    D --> E[程序结束];

while 循环的核心区别

这是理解 do-while 的关键:

特性 while 循环 do-while 循环
执行顺序 先判断,后执行 先执行,后判断
首次执行 如果条件一开始就为假,循环体一次都不会执行 循环体至少会执行一次,无论条件初始值如何。

代码示例

示例 1:基本用法(至少执行一次)

这个例子会要求用户输入一个密码,无论用户第一次输入什么,程序都会先显示“密码已接收”,然后再判断是否正确。

#include <stdio.h>
int main() {
    int password;
    int correct_password = 123456;
    printf("请输入密码: ");
    // 使用 do-while 循环
    do {
        // 循环体:先读取用户的输入
        scanf("%d", &password);
        printf("密码已接收,\n"); // 这行代码无论如何都会执行
        // 然后判断密码是否正确
        if (password == correct_password) {
            printf("密码正确,欢迎进入!\n");
        } else {
            printf("密码错误,请重试!\n");
        }
    } while (password != correct_password); // 如果密码不正确,则继续循环
    return 0;
}

执行过程分析:

  1. 程序进入 do 块,提示用户输入密码。
  2. 用户输入 111scanf 读取它。
  3. 打印 "密码已接收。"。
  4. password (111) 不等于 correct_password (123456),if 条件不满足,打印 "密码错误,请重试!",注意,do 块内的代码已经全部执行完毕。
  5. 接着判断 while 条件 password != correct_password,这个条件为真(111 != 123456)。
  6. 因为条件为真,所以返回到 do,开始下一次循环。
  7. 用户再次输入 123456scanf 读取它。
  8. 打印 "密码已接收。"。
  9. password (123456) 等于 correct_password (123456),if 条件满足,打印 "密码正确,欢迎进入!",注意,do 块内的代码已经全部执行完毕。
  10. 接着判断 while 条件 password != correct_password,这个条件为假(123456 != 123456 为假)。
  11. 因为条件为假,循环结束,程序继续执行 return 0;

示例 2:使用 break 退出循环

可以在循环体内部使用 break 语句来提前终止 do-while 循环。

do while的用法c语言
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    int number = 1;
    printf("开始循环:\n");
    do {
        printf("当前 number 的值是: %d\n", number);
        if (number == 5) {
            printf("检测到 number 等于 5,使用 break 退出循环,\n");
            break; // 当 number 为 5 时,立即跳出整个 do-while 循环
        }
        number++; // number 自增
    } while (number <= 10); // 这个条件实际上不会有机会被判断为假
    printf("循环已结束,\n");
    return 0;
}

输出:

开始循环:
当前 number 的值是: 1
当前 number 的值是: 2
当前 number 的值是: 3
当前 number 的值是: 4
当前 number 的值是: 5
检测到 number 等于 5,使用 break 退出循环。
循环已结束。

适用场景

do-while 循环适用于那些循环体必须至少执行一次的场景,常见的例子包括:

  1. 菜单驱动程序: 必须先显示一次菜单,然后根据用户的选择来判断是否再次显示。
  2. 输入验证: 必须先获取一次用户输入,然后验证其有效性,如果无效则要求重新输入。
  3. 游戏循环: 游戏至少需要运行一帧才能开始处理游戏逻辑。

最佳实践和注意事项

  1. 不要忘记分号 : 这是初学者最常犯的错误。while (condition); 末尾的分号绝对不能少。

    // 错误示例
    do {
        printf("Hello\n");
    } while (i < 10) // <-- 缺少分号,会导致编译错误
  2. 确保循环能终止: 和所有循环一样,必须确保循环条件最终会变为假,否则会导致无限循环

    // 危险示例:这是一个无限循环
    int i = 1;
    do {
        printf("This will run forever!\n");
        // i 没有被修改,i <= 10 永远为真
    } while (i <= 10);
  3. 花括号的使用: 即使循环体只有一条语句,也使用花括号。

    // 不推荐(虽然语法正确,但容易出错)
    do
        printf("Hello\n");
    while (i < 10);
    // 推荐(清晰、安全)
    do {
        printf("Hello\n");
    } while (i < 10);

do-while 循环是 C 语言中一个非常有用的工具,它的核心特点是“先执行,后判断”,确保了循环体至少执行一次,当你遇到需要先做某件事,然后再根据结果决定是否重复做的场景时,do-while 循环就是最自然、最清晰的选择。

-- 展开阅读全文 --
头像
深入体验C语言项目开发PDF适合谁学?
« 上一篇 今天
没有更多啦!
下一篇 »

相关文章

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

目录[+]