do-while循环——先做一次,再决定要不要继续
中等7do-while循环——先做一次,再决定要不要继续
你已经学过了while循环:先检查条件,如果成立才执行循环里的代码。但有时候,我们希望不管条件成不成立,先做一次再说,做完之后再看要不要重复。这就是do-while循环的用处。
想象一下:老师让你每天放学后检查书包,看看有没有东西落在学校。你回到家,先检查一次,如果发现没落东西,今天就不用再检查了;如果落了,明天出门前再检查一次。这个“先检查一次,再决定要不要继续检查”的过程,就是do-while循环。再比如,你第一次尝一道菜,不管好不好吃都先吃一口,如果觉得好吃就再吃一口,否则就不吃了——这也是“先做一次再说”。
一、do-while的写法
do {
// 要重复执行的代码(至少执行一次)
} while (条件);
注意:while的后面要加上分号 ;,这和while循环不一样。while循环的结束括号后面是不加分号的,而do-while必须加,否则程序会报错。
二、生活中的例子:猜数字游戏
让小朋友猜一个1到10之间的数字,猜对了就结束,猜错了继续猜。至少要先猜一次,所以用do-while非常合适。
#include <iostream>
using namespace std;
int main() {
int secret = 7; // 秘密数字
int guess; // 小朋友猜的数
do {
cout << "请猜一个1~10之间的数字:";
cin >> guess;
if (guess > secret) {
cout << "猜大了,再试试!" << endl;
} else if (guess < secret) {
cout << "猜小了,再试试!" << endl;
} else {
cout << "恭喜你,猜对了!" << endl;
}
} while (guess != secret); // 没猜对就继续
return 0;
}
运行过程:
第一次一定会让用户输入,不管输入什么都会执行循环体。如果输入7,条件不成立,循环结束;如果输入别的,循环继续。
三、更多生活中的例子
1. 密码输入
很多手机或游戏会先让你输入一次密码,如果错误就让你再输一次。程序保证至少让你输入一次,这正是do-while的特点。
#include <iostream>
#include <string> // 使用字符串类型
using namespace std;
int main() {
string correctPassword = "123456"; // 正确的密码
string input; // 用户输入的密码
do {
cout << "请输入密码:";
cin >> input;
if (input != correctPassword) {
cout << "密码错误,请重试。" << endl;
}
} while (input != correctPassword); // 密码不对就继续
cout << "密码正确,欢迎进入!" << endl;
return 0;
}
2. 菜单选择
游戏开始时,先显示一次主菜单,用户选一个选项。如果用户选的是“退出”就结束,否则继续显示菜单。因为至少要让用户看到一次菜单,所以用do-while最自然。
#include <iostream>
using namespace std;
int main() {
int choice; // 用户的选择
do {
cout << "====== 游戏菜单 ======" << endl;
cout << "1. 开始游戏" << endl;
cout << "2. 查看帮助" << endl;
cout << "3. 退出" << endl;
cout << "请输入你的选择(1-3):";
cin >> choice;
if (choice == 1) {
cout << "游戏已启动!" << endl;
} else if (choice == 2) {
cout << "帮助文档:按方向键移动,按空格跳跃。" << endl;
} else if (choice == 3) {
cout << "感谢游玩,再见!" << endl;
} else {
cout << "无效选择,请重新输入。" << endl;
}
} while (choice != 3); // 只要没选退出,就继续显示菜单
return 0;
}
3. 轮流回答问题
上课时老师点一个同学回答问题,如果不正确就再点下一个同学,但至少有一个同学会被问到。这个“先问一次再决定”的过程也很像do-while。
四、新手容易犯的错误
错误1:忘记在while后面加分号 ;
do {
cout << "执行一次" << endl;
} while (true) // 少了分号,编译错误!
正确写法是 while (true); 千万不要忘记分号。
错误2:把do-while的条件写成永远为真,变成无限循环
比如猜数字游戏,如果条件写成 while (guess != secret); 但 guess 从来没有被改变(比如忘了 cin >> guess),那么循环永远不会结束。写代码时一定要确保循环体里能改变条件中用的变量。
错误3:误以为while条件后面的分号是while循环带的
有些小朋友会把普通while循环也加上分号:
while (a < 10); // 这不是do-while,普通while加分号会变成空循环体,容易死循环
只有do-while才需要分号,普通while不需要。
错误4:条件写反了
比如想“输入正确就停止”,结果写成 while (guess == secret),那就会在猜对时继续循环,猜错时反而退出,完全反了。务必想清楚:循环条件表示“还需要继续的情况”。
五、do-while和while的区别
| 循环类型 | 先做再检查? | 能否一次都不执行? |
|---|---|---|
| while | 先检查条件 | 能(条件初始为假) |
| do-while | 先执行一次 | 不能(至少执行一次) |
当你需要保证循环体至少执行一次的时候,就选用do-while。比如:
- 先让用户输入一次密码,如果不对再让ta重新输入。
- 先显示一次菜单,根据用户的选择决定是否继续显示。
- 先问一次问题,答错再问下一次。
如果条件一开始就可能是假的,并且你希望一次也不执行,那就用while。
六、小总结
记住口诀:do-while,先做再说,至少一次,条件后跟分号哦。
七、相关知识点指引
学完do-while,你最好再巩固一下:
- while循环:先判断条件,可能一次都不执行。
- for循环:常用于知道循环次数的情况(比如数数1到10)。
- break和continue:在循环里可以提前跳出(break)或跳过本次剩余代码(continue),它们同样适用于do-while。
- 死循环:如何避免条件永远成立导致程序卡死。
如果遇到“至少做一次”的需求,马上想到do-while;如果不知道要做多少次,但可能一次都不做,就乖乖用while或for吧。多写几次就熟练啦!
例题精讲
关于do-while循环,下列说法正确的是( )
以下代码执行后,输出结果是( ) int i = 5; do { cout << i << " "; i--; } while (i > 0);
do-while循环的循环体至少会执行一次,即使条件从一开始就不成立。
以下代码使用do-while循环计算1到n的平方和,请补全循环条件。
int n, sum = 0, i = 1;
cin >> n;
do {
sum += i * i;
i++;
} while (___);
cout << sum << endl;以下代码使用do-while循环反复从键盘输入一个整数,直到输入的是正数为止。请补全循环条件。
int num;
do {
cin >> num;
} while (___);