一、do…while 语句的概念
do…while 语句是 C++ 中三种循环控制语句之一,与 while 语句类似,但执行顺序不同。它适用于至少需要执行一次循环体的场景。
二、do…while 语句的语法形式
do
语句
while (表达式);Code language: JavaScript (javascript)
注意:while (表达式) 末尾的分号不能漏掉。
三、执行顺序
- 首先执行一次循环体语句。
- 然后判断 while 后面表达式(循环条件)的值。
- 若表达式的值为 true(非 0),则回到第 1 步再次执行循环体。
- 若表达式的值为 false(0),则结束循环,执行 do…while 之后的下一条语句。
四、do…while 与 while 的区别
| 特性 | while | do…while |
|---|---|---|
| 执行顺序 | 先判断,后执行 | 先执行,后判断 |
| 最少执行次数 | 0 次(条件一开始为 false 时) | 1 次(无论如何至少执行一次) |
| 适用场景 | 循环次数不确定,可能一次都不执行 | 至少需要执行一次的场景 |
| 末尾分号 | 不需要 | while(表达式) 后必须有分号 |
五、代码示例
以下代码演示了 do…while 语句的实际应用:
#include <iostream>
using namespace std;
int main()
{
// 示例1:输入一个整数,将各位数字反转后输出
int input;
cout << "请输入一个数字:" << endl;
cin >> input;
// 输入 345,输出应为 543
do
{
cout << input % 10;
input = input / 10;
} while (input > 0);
cout << endl;
// 示例2:用 do…while 求 1~10 之和
int total = 0;
int num = 1;
do
{
total += num;
num++;
} while (num <= 10);
cout << "1+2+...+10 = " << total << endl; // 输出 55
// 示例3:输入验证(至少输入一次)
int password;
do
{
cout << "Enter password (hint: 1234): ";
cin >> password;
} while (password != 1234);
cout << "Password correct!" << endl;
// 示例4:求 1~100 中能被 3 整除的数
int i = 0;
do
{
if (i % 3 == 0 && i != 0)
cout << i << " ";
i++;
} while (i <= 100);
cout << endl;
// 示例5:条件一开始就不满足,但仍执行一次
int x = 10;
do
{
cout << "x = " << x << endl; // 会执行一次
x++;
} while (x < 5);
// 输出 x = 10,然后循环结束
return 0;
}Code language: PHP (php)
六、注意事项
- while (表达式) 末尾的分号是语法的一部分,不能省略,否则会导致编译错误。
- 循环体中应包含改变循环条件的语句,避免死循环。
- 循环体如果包含多条语句,必须用大括号 {} 括起来形成复合语句。
- do…while 的循环条件在循环体执行后判断,因此即使条件一开始为 false,循环体也会执行一次。这一特性适合用于菜单驱动程序、输入验证等场景。
- 原示例中 while (input > 0 || (input / 10) != 0) 的条件过于复杂,实际上当 input 变为 0 后,input > 0 为 false 且 input / 10 也为 0,条件为 false,循环结束。简化为 while (input > 0) 即可。
七、常见错误
1. 忘记末尾分号
do
{
cout << "hello" << endl;
} while (count > 0) // 缺少分号,编译错误Code language: JavaScript (javascript)
2. 循环体缺少大括号
int i = 0;
do
cout << i << endl;
i++; // 这条语句不在循环体内,导致死循环
while (i < 5);Code language: JavaScript (javascript)
3. 误用 do…while 代替 while
如果循环体可能一次都不应该执行,却使用了 do…while,会导致逻辑错误。应根据实际需求选择合适的循环语句。
Previous: 循环结构-while语句
Next: 循环结构-for语句