跳转到内容

C++ do While 循环

来自代码酷


C++ Do While循环是一种后测试循环结构,它在执行循环体后检查条件,确保循环体至少执行一次。与while循环不同,do-while循环的条件判断位于循环末尾,使其适用于需要先执行操作再验证条件的场景。

语法结构[编辑 | 编辑源代码]

do-while循环的基本语法如下:

do {
    // 循环体语句
} while (条件表达式);

执行流程[编辑 | 编辑源代码]

flowchart TD A[开始] --> B[执行循环体] B --> C{条件为真?} C -- 是 --> B C -- 否 --> D[结束循环]

关键特点:

  • 循环体至少执行1次
  • 条件表达式为布尔类型(true/false)
  • 结尾必须用分号;

基础示例[编辑 | 编辑源代码]

示例1:简单计数[编辑 | 编辑源代码]

#include <iostream>
using namespace std;

int main() {
    int i = 1;
    do {
        cout << "当前值: " << i << endl;
        i++;
    } while (i <= 5);
    return 0;
}

输出:

当前值: 1
当前值: 2
当前值: 3
当前值: 4
当前值: 5

示例2:用户输入验证[编辑 | 编辑源代码]

#include <iostream>
using namespace std;

int main() {
    int password;
    do {
        cout << "请输入密码(1234):";
        cin >> password;
    } while (password != 1234);
    cout << "密码正确!" << endl;
    return 0;
}

交互示例:

请输入密码(1234):0000
请输入密码(1234):1234
密码正确!

与while循环对比[编辑 | 编辑源代码]

特性 do-while while
执行次数 ≥1次 ≥0次
条件位置 循环后 循环前
适用场景 必须执行的情况 可能不执行的情况

数学表达差异:

  • while循环:while(P) Sif(P) { S; while(P) S }
  • do-while循环:do S while(P)S; while(P) S

实际应用案例[编辑 | 编辑源代码]

案例1:菜单系统[编辑 | 编辑源代码]

#include <iostream>
using namespace std;

void showMenu() {
    cout << "1. 开始游戏\n2. 加载存档\n3. 退出\n";
}

int main() {
    int choice;
    do {
        showMenu();
        cout << "请选择: ";
        cin >> choice;
        
        switch(choice) {
            case 1: /* 游戏逻辑 */ break;
            case 2: /* 加载逻辑 */ break;
            case 3: cout << "再见!"; break;
            default: cout << "无效输入!\n";
        }
    } while (choice != 3);
    return 0;
}

案例2:数据批量处理[编辑 | 编辑源代码]

处理未知数量的数据记录时,先读取后判断:

#include <fstream>
using namespace std;

void processData() {
    ifstream file("data.txt");
    double value, sum = 0;
    int count = 0;
    
    do {
        file >> value;
        if(!file.fail()) {
            sum += value;
            count++;
        }
    } while (!file.fail());
    
    cout << "平均值: " << sum/count << endl;
}

常见错误与调试[编辑 | 编辑源代码]

错误类型 示例 解决方法
缺失分号 while(i<5) 添加结尾分号
无限循环 while(true); 确保条件可变
变量未初始化 使用未赋值的控制变量 初始化所有变量

调试技巧: 1. 在循环开始/结束处添加输出语句 2. 使用调试器观察变量变化 3. 对复杂条件进行分步验证

高级用法[编辑 | 编辑源代码]

嵌套循环[编辑 | 编辑源代码]

do {
    int j = 0;
    do {
        cout << "(" << i << "," << j << ") ";
        j++;
    } while (j < 3);
    i++;
} while (i < 2);

输出:

(0,0) (0,1) (0,2) (1,0) (1,1) (1,2)

与break/continue配合[编辑 | 编辑源代码]

  • break:立即退出整个循环
  • continue:跳过本次迭代剩余部分
int x = 0;
do {
    x++;
    if(x == 3) continue;
    if(x > 5) break;
    cout << x << " ";
} while (true);

输出:

1 2 4 5 

性能考量[编辑 | 编辑源代码]

  • 与while循环性能差异可忽略(现代编译器优化后)
  • 循环体内避免重复计算条件表达式
  • 对于确定执行次数的情况,for循环可能更合适

模板:C++控制流导航