C++ 中 while 与 do...while 循环的完全指南:用法、技巧与避坑
一、引言在 C 编程中循环结构是处理重复性任务的核心工具。while循环作为最基础的循环结构之一以其简洁的逻辑和广泛的适用性成为每个 C 开发者必须熟练掌握的知识点。与for循环不同while循环更适用于不确定具体循环次数但知道何时停止的场景。本文将深入剖析while循环的语法、变体、常见用法以及需要警惕的陷阱。二、基础语法while循环的语法非常简单它只关心一个条件while(/*条件表达式*/){// 循环体只要条件为真就反复执行这里的代码}执行流程计算条件表达式的值。如果为true执行循环体然后跳回第 1 步。如果为false直接跳出循环执行后续代码。注意如果条件一开始就为false循环体一次都不会执行。三、第一个例子打印数字让我们从一个最简单的例子开始——打印 1 到 5 的数字#includeiostreamusingnamespacestd;intmain(){inti1;// 1. 初始化循环变量while(i5){// 2. 循环条件couti ;// 3. 循环体i;// 4. 更新循环变量避免死循环}// 代码会输出1 2 3 4 5return0;}要点解析初始化要在循环前完成。条件检查在每次迭代开始前进行。变量更新必须在循环体内或条件中完成否则会死循环。四、while的常见应用场景4.1 不知道具体循环次数的场景while最擅长处理“当某条件满足时就继续”的逻辑而不是“执行 N 次”。示例求用户输入的数字之和直到输入 0 为止#includeiostreamusingnamespacestd;intmain(){intnum,sum0;cinnum;// 先读取第一个数while(num!0){sumnum;// 加和cinnum;// 继续读取下一个数}std::cout总和为sum;return0;}4.2 游戏或服务器主循环游戏引擎、服务器程序通常使用while来维持一个持续运行的主循环。#includeiostreamusingnamespacestd;intmain(){boolisRunningtrue;intchoice;while(isRunning){cout\n--- 菜单 ---\n;cout1. 开始游戏\n;cout2. 设置\n;cout3. 退出\n;cout请选择\n;cinchoice;if(choice3){isRunningfalse;// 控制循环退出cout再见std::endl;}}return0;}4.3 使用迭代器遍历容器while可以配合迭代器遍历 STL 容器。#includeiostream#includevectorusingnamespacestd;intmain(){std::vectorintnums{10,20,30,40,50};autoitnums.begin();// 获取起始迭代器while(it!nums.end()){std::cout*it ;it;// 移动迭代器}// 代码会输出10 20 30 40 50return0;}五、do...while循环至少执行一次当需要先执行一次循环体再判断条件时使用do...while。do{// 循环体无论如何都会先执行一次}while(/*条件*/);经典示例用户输入验证#includeiostreamusingnamespacestd;intmain(){intpassword;do{cout请输入密码1234;cinpassword;if(password!1234)cout密码错误\n;}while(password!1234);cout登录成功std::endl;return0;}这个场景非常适合do...while因为必须让用户至少输入一次密码才能判断对错。六、常见死循环及预防死循环是while最致命的陷阱CPU 会占用 100%程序假死。6.1 忘记更新循环变量inti0;while(i5){couti ;// 缺少 i; - 死循环}6.2 错误的分号;在while条件后误加分号会导致循环体为空语句。inti0;while(i5);// -- 致命分号循环体是空的{couti ;i;}// 程序卡死永远进不到花括号里6.3 有意无限循环有时我们需要故意制造无限循环通常会在循环体内用break跳出。while(true){// 处理任务if(exitCondition)break;// 条件满足跳出循环}七、while与for的选择特性whilefor适用场景循环次数未知条件驱动循环次数已知计数驱动结构初始化在外部更新在内部初始化、条件、更新集中在头部可读性当逻辑重在某个状态时更直观遍历固定范围时更简洁典型用法while (exitCondition)for (int i 0; i n; i)建议如果你知道要循环 N 次用for如果你知道在某个条件满足前要一直循环用while。八、总结while循环先判断后执行可能一次都不执行。do...while循环先执行后判断至少执行一次。核心要素务必将初始化、条件、更新三要素牢记于心。防坑指南警惕分号误放、更新遗漏导致的无尽循环。掌握了while的核心理念你就能在处理文件读取、用户交互、状态维护等复杂逻辑时写出行云流水的代码。勤加练习将它变成你编程肌肉记忆的一部分吧