C++ do While 循环
外观
C++ Do While循环是一种后测试循环结构,它在执行循环体后检查条件,确保循环体至少执行一次。与while循环不同,do-while循环的条件判断位于循环末尾,使其适用于需要先执行操作再验证条件的场景。
语法结构[编辑 | 编辑源代码]
do-while循环的基本语法如下:
do {
// 循环体语句
} while (条件表达式);
执行流程[编辑 | 编辑源代码]
关键特点:
- 循环体至少执行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循环:
- do-while循环:
实际应用案例[编辑 | 编辑源代码]
案例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
循环可能更合适