C语言中的do while循环(非常详细)
循环是 C语言中非常重要的一种控制结构,它允许我们重复执行一段代码,直到满足某个条件为止。
C语言提供了多种循环结构,包括 while
、do-while
和for
循环,这篇文章带领读者学习do-while
的用法。
与其他循环( for
和 while
)相比,do-while
循环有一个独特的特点:它会先执行循环体内的代码,然后再判断条件是否成立。这意味着,无论条件是否满足,循环体内的代码至少会被执行一次。
接下来,我们将从语法、使用场景、注意事项等多个方面,全面剖析 do-while
循环。
do-while循环的语法
do-while
循环的基本结构非常直观,它的语法如下:
do { // 循环体:需要重复执行的代码 } while (条件);
语法说明如下:
- do: 关键字,表示循环的开始。 - { ... }: 包裹循环体的代码块,可以包含多行代码。如果只有一行代码,大括号可以省略,但为了可读性,建议始终保留。 - while: 关键字,表示条件判断的开始。 - (条件): 括号内是一个表达式,通常返回布尔值(true 或 false)。条件为真时,循环继续;为假时,循环结束。 - 分号 ;: 注意,while 后面的分号是必须的,缺少分号会导致编译错误。
简单来说,do-while
循环的工作流程是:
-
先执行
do
后面的循环体代码。 -
执行完循环体后,检查
while
后面的条件。 - 如果条件为真,返回步骤 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
初始化为 1。 -
do
块内的printf
先打印i
的值,然后i
自增 1。 -
检查条件
i <= 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
循环吧!