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 循环吧!
ICP备案:
公安联网备案: