☰
C++ 中 while 与 do...while 循环的用法、技巧与避坑
2026/10/6 13:01:24 网站建设 项目流程

一、引言

在 C++ 编程中,循环结构是处理重复性任务的核心工具。while循环作为最基础的循环结构之一,以其简洁的逻辑和广泛的适用性,成为每个 C++ 开发者必须熟练掌握的知识点。

与for循环不同,while循环更适用于不确定具体循环次数,但知道何时停止的场景。本文将深入剖析while循环的语法、变体、常见用法以及需要警惕的陷阱。

二、基础语法

while循环的语法非常简单,它只关心一个条件:

1

2

3

while(/*条件表达式*/) {

// 循环体:只要条件为真,就反复执行这里的代码

}

执行流程:

  1. 计算条件表达式的值。
  2. 如果为true,执行循环体,然后跳回第 1 步。
  3. 如果为false,直接跳出循环,执行后续代码。

注意:如果条件一开始就为false,循环体一次都不会执行。

三、第一个例子:打印数字

让我们从一个最简单的例子开始——打印 1 到 5 的数字:

1

2

3

4

5

6

7

8

9

10

11

#include <iostream>

usingnamespacestd;

intmain() {

inti = 1;// 1. 初始化循环变量

while(i <= 5) {// 2. 循环条件

cout << i <<" ";// 3. 循环体

i++;// 4. 更新循环变量,避免死循环

}

// 代码会输出:1 2 3 4 5

return0;

}

要点解析:

  • 初始化要在循环前完成。
  • 条件检查在每次迭代开始前进行。
  • 变量更新必须在循环体内或条件中完成,否则会死循环。

四、while的常见应用场景

4.1 不知道具体循环次数的场景

while最擅长处理“当某条件满足时就继续”的逻辑,而不是“执行 N 次”。

示例:求用户输入的数字之和,直到输入 0 为止

1

2

3

4

5

6

7

8

9

10

11

12

#include <iostream>

usingnamespacestd;

intmain() {

intnum, sum = 0;

cin >> num;// 先读取第一个数

while(num != 0) {

sum += num;// 加和

cin >> num;// 继续读取下一个数

}

std::cout <<"总和为:"<< sum;

return0;

}

4.2 游戏或服务器主循环

游戏引擎、服务器程序通常使用while来维持一个持续运行的主循环。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <iostream>

usingnamespacestd;

intmain() {

boolisRunning =true;

intchoice;

while(isRunning) {

cout <<"\n--- 菜单 ---\n";

cout <<"1. 开始游戏\n";

cout <<"2. 设置\n";

cout <<"3. 退出\n";

cout <<"请选择:\n";

cin >> choice;

if(choice == 3) {

isRunning =false;// 控制循环退出

cout <<"再见!"<< std::endl;

}

}

return0;

}

4.3 使用迭代器遍历容器

while可以配合迭代器遍历 STL 容器。

1

2

3

4

5

6

7

8

9

10

11

12

13

#include <iostream>

#include <vector>

usingnamespacestd;

intmain() {

std::vector<int> nums = {10, 20, 30, 40, 50};

auto it = nums.begin();// 获取起始迭代器

while(it != nums.end()) {

std::cout << *it <<" ";

it++;// 移动迭代器

}

// 代码会输出:10 20 30 40 50

return0;

}

五、do...while循环:至少执行一次

当需要先执行一次循环体,再判断条件时,使用do...while。

1

2

3

do{

// 循环体:无论如何都会先执行一次

}while(/*条件*/);

经典示例:用户输入验证

1

2

3

4

5

6

7

8

9

10

11

12

#include <iostream>

usingnamespacestd;

intmain() {

intpassword;

do{

cout <<"请输入密码(1234):";

cin >> password;

if(password != 1234) cout <<"密码错误!\n";

}while(password != 1234);

cout <<"登录成功!"<< std::endl;

return0;

}

这个场景非常适合do...while,因为必须让用户至少输入一次密码,才能判断对错。

六、常见死循环及预防

死循环是while最致命的陷阱,CPU 会占用 100%,程序假死。

6.1 忘记更新循环变量

1

2

3

4

5

inti = 0;

while(i < 5) {

cout << i <<" ";

// 缺少 i++; -> 死循环!

}

6.2 错误的分号(;)

在while条件后误加分号,会导致循环体为空语句。

1

2

3

4

5

6

7

inti = 0;

while(i < 5);// <-- 致命分号!循环体是空的

{

cout << i <<" ";

i++;

}

// 程序卡死,永远进不到花括号里

6.3 有意无限循环

有时我们需要故意制造无限循环,通常会在循环体内用break跳出。

1

2

3

4

while(true) {

// 处理任务

if(exitCondition)break;// 条件满足,跳出循环

}

七、while与for的选择

特性whilefor
适用场景循环次数未知,条件驱动循环次数已知,计数驱动
结构初始化在外部,更新在内部初始化、条件、更新集中在头部
可读性当逻辑重在某个"状态"时,更直观遍历固定范围时更简洁
典型用法while (exitCondition)for (int i = 0; i < n; i++)

建议:如果你知道要循环 N 次,用for;如果你知道在某个条件满足前要一直循环,用while。

八、总结

  • while循环:先判断,后执行,可能一次都不执行。
  • do...while循环:先执行,后判断,至少执行一次。
  • 核心要素:务必将初始化、条件、更新三要素牢记于心。
  • 防坑指南:警惕分号误放、更新遗漏导致的无尽循环。

掌握了while的核心理念,你就能在处理文件读取、用户交互、状态维护等复杂逻辑时,写出行云流水的代码。勤加练习,将它变成你编程肌肉记忆的一部分吧!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询