# C++ `while`和`do...while`循环

> 原文： [https://www.programiz.com/cpp-programming/do-while-loop](https://www.programiz.com/cpp-programming/do-while-loop)

#### 在本教程中，我们将借助一些示例来学习 C++ 编程中`while`和`do...while`循环的用法。

在计算机编程中，循环用于重复代码块。

例如，假设我们要显示一条消息 100 次。 然后，我们可以使用循环来代替写`print`语句 100 次。

那只是一个简单的例子； 通过有效利用循环，我们可以在程序中实现更高的效率和复杂性。

C++ 中有 **3** 种循环。

1.  `for`循环
2.  `while`循环
3.  `do...while`循环

在上一教程中，我们了解了 [C++ `for`循环](/cpp-programming/for-loop)。 在这里，我们将学习`while`和`do...while`循环。

* * *

## C++ `while`循环

`while`循环的语法为：

```cpp
while (condition) {
    // body of the loop
}
```

这里，

*   `while`循环求值`condition`
*   如果`condition`求值为`true`，则将执行`while`循环内的代码。
*   再次求值`condition`。
*   该过程一直持续到`condition`为`false`为止。
*   当`condition`求值为`false`时，循环终止。

要了解有关`conditions`的更多信息，请访问 [C++ 关系和逻辑运算符](/cpp-programming/relational-logical-operators)。

* * *

### `While`循环流程图

![C++ while loop flowchart](img/152de6d1f09bc7a0bd83b4707a1d1cf8.png "C++ while loop flowchart")

C++ `while`循环流程图



* * *

### 示例 1：显示从 1 到 5 的数字

```cpp
// C++ Program to print numbers from 1 to 5

#include <iostream>

using namespace std;

int main() {
    int i = 1; 

    // while loop from 1 to 5
    while (i <= 5) {
        cout << i << " ";
        ++i;
    }

    return 0;
}
```

**输出**

```cpp
1 2 3 4 5
```

该程序的工作原理如下。

| 迭代 | 变量 | `i <= 5` | 行为 |
| --- | --- | --- | --- |
| 1 | `i = 1` | `true` | 打印 1，将`i`增加到`2`。 |
| 2 | `i = 2` | `true` | 打印 2，将`i`增大为`3`。 |
| 3 | `i = 3` | `true` | 打印 3，将`i`增大为`4` |
| 4 | `i = 4` | `true` | 打印 4，将`i`增加到`5`。 |
| 5 | `i = 5` | `true` | 打印 5，将`i`增加到`6`。 |
| 6 | `i = 6` | `false` | 循环终止 |

* * *

### 示例 2：仅正数之和

```cpp
// program to find the sum of positive numbers
// if the user enters a negative number, the loop ends
// the negative number entered is not added to the sum

#include <iostream>
using namespace std;

int main() {
    int number;
    int sum = 0;

    // take input from the user
    cout << "Enter a number: ";
    cin >> number;

    while (number >= 0) {
        // add all positive numbers
        sum += number;

        // take input again if the number is positive
        cout << "Enter a number: ";
        cin >> number;
    }

    // display the sum
    cout << "\nThe sum is " << sum << endl;

    return 0;
}
```

**输出**

```cpp
Enter a number: 6
Enter a number: 12
Enter a number: 7
Enter a number: 0
Enter a number: -2

The sum is 25
```

在此程序中，提示用户输入一个数字，该数字存储在变量`num`中。

为了存储数字的总和，我们声明一个变量`sum`并将其初始化为`0`的值。

`while`循环继续，直到用户输入一个负数。 在每次迭代期间，用户输入的数字将添加到`sum`变量中。

当用户输入负数时，循环终止。 最后，显示总和。

* * *

## C++ `do...while`循环

`do...while`循环是`while`循环的一种变体，具有一个重要的区别：`do...while`循环的主体在检查`condition`之前执行一次。

其语法为：

```cpp
do {
   // body of loop;
}
while (condition);
```

Here,

*   循环的主体首先执行。 然后求值`condition`。
*   如果`condition`求值为`true`，则将再次执行`do`语句内的循环主体。
*   再次求值`condition`。
*   如果`condition`求值为`true`，则将再次执行`do`语句内的循环主体。
*   该过程一直持续到`condition`求值为`false`为止。 然后循环停止。

* * *

### `do...while`循环流程图

![C++ do...while loop flowchart](img/1ec16a1ad06171f3aa3adffcb7f93c3a.png "C++ do...while loop flowchart")

C++ `do...while`循环流程图



* * *

### 示例 3：显示从 1 到 5 的数字

```cpp
// C++ Program to print numbers from 1 to 5

#include <iostream>

using namespace std;

int main() {
    int i = 1; 

    // do...while loop from 1 to 5
    do {
        cout << i << " ";
        ++i;
    }
    while (i <= 5);

    return 0;
}
```

**输出**

```cpp
1 2 3 4 5
```

Here is how the program works.

| 迭代 | 变量 | `i <= 5` | 行为 |
| --- | --- | --- | --- |
|     | `i = 1` | 未检查 | 打印 1，将`i`增加到 2 |
| 1 | `i = 2` | `true` | 打印 2 ，将`i`增加到 3 |
| 2 | `i = 3` | `true` | 打印 3 ，将`i`增加到 4 |
| 3 | `i = 4` | `true` | 打印 4 ，将`i`增加到 5 |
| 4 | `i = 5` | `true` | 打印 5 ，将`i`增大为 **6** |
| 5 | `i = 6` | `false` | 循环结束 |

* * *

### 示例 4：仅正数之和

```cpp
// program to find the sum of positive numbers
// If the user enters a negative number, the loop ends
// the negative number entered is not added to the sum

#include <iostream>
using namespace std;

int main() {
    int number = 0;
    int sum = 0;

    do {
        sum += number;

        // take input from the user
        cout << "Enter a number: ";
        cin >> number;
    }
    while (number >= 0);

    // display the sum
    cout << "\nThe sum is " << sum << endl;

    return 0;
}
```

**输出 1**

```cpp
Enter a number: 6
Enter a number: 12
Enter a number: 7
Enter a number: 0
Enter a number: -2

The sum is 25
```

在此，`do...while`循环继续进行，直到用户输入一个负数。 当数字为负数时，循环终止；否则为 0。 负数不会添加到`sum`变量中。

**输出 2**

```cpp
Enter a number: -6
The sum is 0.
```

如果用户输入一个负数，则`do...while`循环的主体仅运行一次。

* * *

## 无限`while`循环

如果循环的`condition`始终为`true`，则循环运行无限次（直到内存已满）。 例如，

```cpp
// infinite while loop
while(true) {
    // body of the loop
}
```

这是无限`do...while`循环的示例。

```cpp
// infinite do...while loop

int count = 1;

do {
   // body of loop
} 
while(count == 1);
```

在上述程序中，`condition`始终为`true`。 因此，循环体将运行无限次。

* * *

## `for` vs `while`循环

当已知迭代次数时，通常使用`for`循环。 例如，

```cpp
// This loop is iterated 5 times
for (int i = 1; i <=5; ++i) {
   // body of the loop
}
```

在这里，我们知道`for`循环将执行 5 次。

但是，`while`和`do...while`循环通常在迭代次数未知的情况下使用。 例如，

```cpp
while (condition) {
    // body of the loop
}
```

* * *

查看以下示例以了解更多信息：

*   [C++ 程序：显示斐波那契数列](/cpp-programming/examples/fibonacci-series)
*   [C++ 程序：查找 GCD](https://www.geeksforgeeks.org/c-program-find-gcd-hcf-two-numbers/)
*   [C++ 程序：查找 LCM](/cpp-programming/examples/lcm)