CC++ & Algorithm

C++ do-while 循环基础

简单40
语言版本:C++Python
概述:用“先做一次,再问是否继续”的方式,学习do-while循环与while循环的区别。

C++ do-while 循环:先做一次,再问要不要继续

小朋友们,你有没有做过这样的事情——先偷偷舔一口冰淇淋,然后问自己:“还想吃吗?”如果还想,就再舔一口,直到不想吃为止。在C++里,有一种循环叫 do-while循环,它的工作方式就跟这个一模一样:先做一次循环里的内容,再去判断条件是否满足,满足就继续,不满足就停止

while循环是“先问再决定做不做”,就像妈妈先问你“要喝水吗?”,你说“要”才去倒水。但do-while循环是“先做一次再问”,就像你已经喝了一口水,然后才问自己“我还渴吗?”——所以不管条件成不成立,身体(循环体)至少会喝掉那一口水。


1. do-while循环长什么样?

do-while循环的写法就像这样:

do {
    // 要重复做的事情(循环体)
} while (条件);   // 注意!这里有一个分号

格式要点:

  • 先写 do 关键字,后面跟着一对大括号 {} 包起来的循环体。
  • 大括号后面写 while (条件),并且必须以分号 ; 结束。
  • 条件是一个“真/假”的表达式(比如 score < 60num != 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. 小练习试试看

  1. 把上面数字两倍的例子改成:输入一个数,输出它乘以10的结果,输入负数时结束。(提示:条件写成 num >= 0
  2. 利用do-while循环,写一个猜数字的小游戏:程序先想好一个1~10之间的数字,让你猜,猜对后问“还玩吗?输入1继续,0结束”。

9. 相关知识点指引

  • while循环:do-while的“兄弟”,先判断再执行。适合可能一次都不需要执行的情况。
  • for循环:最常用的循环,适合知道循环次数的场景。
  • break和continue:用在循环内部,break可以跳出整个循环,continue可以跳过本次循环剩余部分。
  • 无限循环:如果不小心把条件写成永远为真(比如 while (1) { }),就会无限循环,程序卡住,要小心哦。

学好do-while,你就多了一招“先动手后思考”的编程技巧。试试写几个小程序,感受它的奥妙吧!

例题精讲

1单选题

在C++中,do-while循环的循环体至少执行多少次?

A0次
B1次
C2次
D取决于条件
2单选题

以下代码的输出是什么? int i=5; do { cout<<i; i--; } while(i>0);

A54321
B543210
C5432
D54320
3判断题

在C++中,do-while循环和while循环的区别在于do-while循环至少执行一次循环体。

4判断题

在do-while循环中,循环条件后面的分号是必须的。

5填空题
完成以下代码,使do-while循环输出1到5。
int i=1;
do {
  cout<<i;
  ___;
} while(i<=5);