首页 > 编程笔记 > C语言笔记 阅读:12

C语言中的do while循环(非常详细)

循环是 C语言中非常重要的一种控制结构,它允许我们重复执行一段代码,直到满足某个条件为止。

C语言提供了多种循环结构,包括 whiledo-whilefor循环,这篇文章带领读者学习do-while的用法。

与其他循环( forwhile)相比,do-while循环有一个独特的特点:它会先执行循环体内的代码,然后再判断条件是否成立。这意味着,无论条件是否满足,循环体内的代码至少会被执行一次。

接下来,我们将从语法、使用场景、注意事项等多个方面,全面剖析 do-while 循环。

do-while循环的语法

do-while 循环的基本结构非常直观,它的语法如下:

do {
    // 循环体:需要重复执行的代码
} while (条件);

语法说明如下:

- do: 关键字,表示循环的开始。
- { ... }: 包裹循环体的代码块,可以包含多行代码。如果只有一行代码,大括号可以省略,但为了可读性,建议始终保留。
- while: 关键字,表示条件判断的开始。
- (条件): 括号内是一个表达式,通常返回布尔值(true 或 false)。条件为真时,循环继续;为假时,循环结束。
- 分号 ;: 注意,while 后面的分号是必须的,缺少分号会导致编译错误。

简单来说,do-while 循环的工作流程是:

  1. 先执行 do 后面的循环体代码。
  2. 执行完循环体后,检查 while 后面的条件。
  3. 如果条件为真,返回步骤 1 继续执行;如果条件为假,退出循环。


让我们通过一个例子来理解 do-while 循环。假设我们要编写一个程序,打印数字 1 到 5。

#include <stdio.h>

int main() {
    int i = 1;
    do {
        printf("%d\n", i);
        i++;
    } while (i <= 5);
    return 0;
}

输出结果:

1
2
3
4
5

在这个例子中:

i 增加到 6 时,条件 i <= 5 变为假,循环结束。

do-while循环至少执行一次

while 循环不同,do-while 循环的条件判断是在循环体执行之后进行的。这意味着,即使条件一开始就不满足,循环体内的代码也会执行一次。

来看一个对比示例:

// 使用 while 循环
int i = 10;
while (i < 5) {
    printf("Hello\n");
    i++;
}

输出结果为:无输出。因为 i < 5 一开始就不成立,循环体一次也不会执行。

// 使用 do-while 循环
int i = 10;
do {
    printf("Hello\n");
    i++;
} while (i < 5);

输出结果:

Hello

在这个例子中,尽管 i < 5 一开始就不成立,但 do-while 循环仍然会先执行一次循环体,打印 "Hello",然后判断条件并退出。

do-while使用场景

do-while 循环特别适合那些“至少需要执行一次”的场景。以下是一些常见的应用:

1) 用户输入验证

假设我们要编写一个程序,要求用户输入一个 1 到 100 之间的数字,如果输入不符合要求,就提示用户重新输入。由于需要至少获取一次用户输入,do-while 非常适合这种场景。

#include <stdio.h>

int main() {
    int num;
    do {
        printf("请输入一个 1 到 100 之间的数字: ");
        scanf("%d", &num);
        if (num < 1 || num > 100) {
            printf("输入错误,请重新输入!\n");
        }
    } while (num < 1 || num > 100);
    printf("你输入的有效数字是: %d\n", num);
    return 0;
}

输出结果示例(假设用户输入了 -5、150、42):

请输入一个 1 到 100 之间的数字: -5
输入错误,请重新输入!
请输入一个 1 到 100 之间的数字: 150
输入错误,请重新输入!
请输入一个 1 到 100 之间的数字: 42
你输入的有效数字是: 42

在这个程序中,do-while 循环确保至少执行一次输入操作,然后根据条件判断是否需要继续循环。

2) 菜单驱动程序

另一个常见场景是菜单驱动程序,用户可以选择不同的选项,直到选择退出为止。例如:

#include <stdio.h>

int main() {
    int choice;
    do {
        printf("菜单:\n");
        printf("1. 选项 1\n");
        printf("2. 选项 2\n");
        printf("0. 退出\n");
        printf("请选择: ");
        scanf("%d", &choice);
    } while (choice != 0);
    printf("程序退出。\n");
    return 0;
}

这里,菜单至少显示一次,用户可以根据需要多次选择,直到输入 0 退出。

do-while注意事项

虽然 do-while 循环非常有用,但使用时需要注意以下几点:

1) 确保条件最终会变为假

如果循环条件永远不会变为假,就会导致无限循环。例如:

do {
    printf("Infinite loop!\n");
} while (1);

这种无限循环在某些情况下(如嵌入式系统)可能是有意的,但在大多数程序中需要避免。确保循环体内有改变条件的逻辑,例如变量的自增或用户输入。

2) 分号不可遗漏

while 后面的分号是语法要求,忘记添加会导致编译错误。例如:

// 错误示例
do {
    printf("Hello\n");
} while (1)  // 缺少分号,编译失败

3) 与while循环的对比

如果循环体不需要“至少执行一次”,使用 while 循环可能更合适。

例如,打印 1 到 5 的数字,使用 while 循环同样可以实现,且逻辑更直观:

int i = 1;
while (i <= 5) {
    printf("%d\n", i);
    i++;
}

综合练习

让我们通过一个综合示例来巩固所学知识。编写一个程序,计算 1 到 n 的和,其中 n 由用户输入,且必须是正整数。

#include <stdio.h>

int main() {
    int n, sum = 0;
    do {
        printf("请输入一个正整数 n: ");
        scanf("%d", &n);
        if (n <= 0) {
            printf("输入必须是正整数,请重新输入!\n");
        }
    } while (n <= 0);
    
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    printf("1 到 %d 的和是: %d\n", n, sum);
    return 0;
}

输出结果示例(假设用户输入 -3、10):

请输入一个正整数 n: -3
输入必须是正整数,请重新输入!
请输入一个正整数 n: 10
1 到 10 的和是: 55

在这个程序中,do-while 循环用于验证用户输入,循环体内的 for 循环则负责计算总和。

总结

do-while 是 C 语言提供的一种循环语句,它的核心特点是“先执行,后判断”,非常适合需要至少执行一次的场景,如输入验证和菜单选择。

阅读完本文,你应该已经掌握了 do-while 的语法、使用场景以及注意事项,尝试在你的代码中使用 do-while 循环吧!

相关文章