C++ do-while 循环基础
简单40C++ do-while 循环:先做一次,再问要不要继续
小朋友们,你有没有做过这样的事情——先偷偷舔一口冰淇淋,然后问自己:“还想吃吗?”如果还想,就再舔一口,直到不想吃为止。在C++里,有一种循环叫 do-while循环,它的工作方式就跟这个一模一样:先做一次循环里的内容,再去判断条件是否满足,满足就继续,不满足就停止。
while循环是“先问再决定做不做”,就像妈妈先问你“要喝水吗?”,你说“要”才去倒水。但do-while循环是“先做一次再问”,就像你已经喝了一口水,然后才问自己“我还渴吗?”——所以不管条件成不成立,身体(循环体)至少会喝掉那一口水。
1. do-while循环长什么样?
do-while循环的写法就像这样:
do {
// 要重复做的事情(循环体)
} while (条件); // 注意!这里有一个分号
格式要点:
- 先写
do关键字,后面跟着一对大括号{}包起来的循环体。 - 大括号后面写
while (条件),并且必须以分号;结束。 - 条件是一个“真/假”的表达式(比如
score < 60、num != 0等)。
熟悉吧?和while循环很像,唯一区别就是条件写在最后面,而且末尾有分号。
2. 一个经典例子:从1数到5
我们先用do-while循环写一个从1数到5的例子,看看它和while有什么不同。
#include <iostream>
using namespace std;
int main() {
int i = 1; // i 用来记录当前数字
do {
cout << i << " "; // 先输出 i 的值
i = i + 1; // 然后让 i 增加1
} while (i <= 5); // 判断是否继续:i <= 5 就继续,否则结束
return 0;
}
运行结果:
1 2 3 4 5
这个结果和while循环一模一样。但别急,来看个有意思的情况。
3. 如果一开始条件就为假呢?
假设我们把 i 初始值改成10:
int i = 10; // i 等于10,已经大于5了
do {
cout << i << " "; // 先输出一次 10
i = i + 1;
} while (i <= 5); // 检查条件:10 <= 5?假,所以立刻结束
运行结果:
10
你看,尽管条件 i <= 5 一开始就是假的(10 > 5),但do-while循环还是先做了一次循环体,输出了10。然后才检查条件,发现不满足,就结束了。
对比while循环:如果换成 while (i <= 5) { ... } ,一次都不会输出。
所以do-while的“先做一次”特点非常有用——当你希望不管条件如何,至少执行一次时,就用do-while。
4. 生活中的例子:先展示一次菜单
想象你玩一个游戏,每次进入游戏都会先显示一次主菜单:
1. 开始游戏
2. 设置
3. 退出
请输入选择:
然后问用户“还要继续吗?”如果用户选“是”,就再显示菜单;否则退出。
用do-while实现就很自然——至少显示一次菜单,而while循环如果一开始用户就不想继续,菜单连一次都不显示,那就不合理了。
代码片段示例:
int choice; // 用户的选择
do {
cout << "=== 主菜单 ===" << endl;
cout << "1. 开始游戏" << endl;
cout << "2. 设置" << endl;
cout << "3. 退出" << endl;
cout << "请输入选择: ";
cin >> choice; // 读取用户输入
// ... 根据 choice 做不同事情 ...
} while (choice != 3); // 如果选3则退出循环
5. 新手最容易犯的错误
❌ 错误1:忘记末尾的分号
do {
cout << "hello";
} while (条件) // 少了分号!编译会报错
正确写法:} while (条件); 一定要加分号。
❌ 错误2:把条件写在了大括号里面
do {
while (条件); // 错误!这里不能放 while
// ...
}
正确:while (条件); 是写在 } 后面的。
❌ 错误3:条件写反了(死循环)
比如你想让用户输入0时结束,却写了 while (num == 0),结果每次用户输入0才继续,输入其他数反而结束,跟预期相反。
记住:do-while的条件是“继续循环的条件”,不是“结束循环的条件”。
6. 完整示例:用户输入数字,输出两倍,直到输入0为止
下面这个程序正是练习题的要求:让用户输入一个数,输出这个数的两倍,只要输入的不是0就继续。我们用了do-while来实现。
#include <iostream>
using namespace std;
int main() {
int num; // 用来保存用户输入的数字
do {
cout << "请输入一个数字(输入0结束程序): ";
cin >> num; // 读取输入
int result = num * 2; // 计算两倍
cout << "它的两倍是: " << result << endl;
} while (num != 0); // 只要 num 不等于0,就继续循环
cout << "程序结束,再见!" << endl;
return 0;
}
运行过程示例:
请输入一个数字(输入0结束程序): 5
它的两倍是: 10
请输入一个数字(输入0结束程序): 8
它的两倍是: 16
请输入一个数字(输入0结束程序): 0
它的两倍是: 0
程序结束,再见!
注意:即使用户第一次输入0,程序也会先执行一次循环体,输出 它的两倍是: 0,然后检查 0 != 0 为假,才结束。这正是do-while的特点。
7. 和 while 循环对比总结
| 特点 | while循环 | do-while循环 |
|---|---|---|
| 判断时机 | 先判断条件,再执行循环体 | 先执行一次循环体,再判断条件 |
| 最少执行次数 | 0次(条件假时一次都不执行) | 1次(条件再假也至少执行一次) |
| 应用场景 | 不需要一定执行一次的情况 | 需要至少执行一次(比如显示菜单、读取用户输入再判断) |
| 末尾分号 | 不需要 | 必须有 |
8. 小练习试试看
- 把上面数字两倍的例子改成:输入一个数,输出它乘以10的结果,输入负数时结束。(提示:条件写成
num >= 0) - 利用do-while循环,写一个猜数字的小游戏:程序先想好一个1~10之间的数字,让你猜,猜对后问“还玩吗?输入1继续,0结束”。
9. 相关知识点指引
- while循环:do-while的“兄弟”,先判断再执行。适合可能一次都不需要执行的情况。
- for循环:最常用的循环,适合知道循环次数的场景。
- break和continue:用在循环内部,break可以跳出整个循环,continue可以跳过本次循环剩余部分。
- 无限循环:如果不小心把条件写成永远为真(比如
while (1) { }),就会无限循环,程序卡住,要小心哦。
学好do-while,你就多了一招“先动手后思考”的编程技巧。试试写几个小程序,感受它的奥妙吧!
例题精讲
在C++中,do-while循环的循环体至少执行多少次?
以下代码的输出是什么? int i=5; do { cout<<i; i--; } while(i>0);
在C++中,do-while循环和while循环的区别在于do-while循环至少执行一次循环体。
在do-while循环中,循环条件后面的分号是必须的。
完成以下代码,使do-while循环输出1到5。
int i=1;
do {
cout<<i;
___;
} while(i<=5);