循环结构-do…while语句

一、do…while 语句的概念

do…while 语句是 C++ 中三种循环控制语句之一,与 while 语句类似,但执行顺序不同。它适用于至少需要执行一次循环体的场景。

二、do…while 语句的语法形式

do
    语句
while (表达式);Code language: JavaScript (javascript)

注意:while (表达式) 末尾的分号不能漏掉。

三、执行顺序

  1. 首先执行一次循环体语句。
  2. 然后判断 while 后面表达式(循环条件)的值。
  3. 若表达式的值为 true(非 0),则回到第 1 步再次执行循环体。
  4. 若表达式的值为 false(0),则结束循环,执行 do…while 之后的下一条语句。

四、do…while 与 while 的区别

特性whiledo…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,会导致逻辑错误。应根据实际需求选择合适的循环语句。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注