最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 中 while 與 do...while 循環(huán)的用法、技巧與避坑

 更新時間:2026年06月04日 10:35:32   作者:noipp  
在C++ 編程中,循環(huán)結構是處理重復性任務的核心工具,本文將深入剖析 while 循環(huán)的語法、變體、常見用法以及需要警惕的陷阱,感興趣的朋友一起看看吧

一、引言

在 C++ 編程中,循環(huán)結構是處理重復性任務的核心工具。while 循環(huán)作為最基礎的循環(huán)結構之一,以其簡潔的邏輯和廣泛的適用性,成為每個 C++ 開發(fā)者必須熟練掌握的知識點。

for 循環(huán)不同,while 循環(huán)更適用于不確定具體循環(huán)次數(shù),但知道何時停止的場景。本文將深入剖析 while 循環(huán)的語法、變體、常見用法以及需要警惕的陷阱。

二、基礎語法

while 循環(huán)的語法非常簡單,它只關心一個條件:

while (/*條件表達式*/) {
    // 循環(huán)體:只要條件為真,就反復執(zhí)行這里的代碼
}

執(zhí)行流程:

  1. 計算條件表達式的值。
  2. 如果為 true,執(zhí)行循環(huán)體,然后跳回第 1 步。
  3. 如果為 false,直接跳出循環(huán),執(zhí)行后續(xù)代碼。

注意: 如果條件一開始就為 false,循環(huán)體一次都不會執(zhí)行。

三、第一個例子:打印數(shù)字

讓我們從一個最簡單的例子開始——打印 1 到 5 的數(shù)字:

#include <iostream>
using namespace std;
int main() {
    int i = 1;  // 1. 初始化循環(huán)變量
    while (i <= 5) {  // 2. 循環(huán)條件
        cout << i << " ";  // 3. 循環(huán)體
        i++;  // 4. 更新循環(huán)變量,避免死循環(huán)
    }
    // 代碼會輸出:1 2 3 4 5
    return 0;
}

要點解析:

  • 初始化要在循環(huán)前完成。
  • 條件檢查在每次迭代開始前進行。
  • 變量更新必須在循環(huán)體內(nèi)或條件中完成,否則會死循環(huán)。

四、while的常見應用場景

4.1 不知道具體循環(huán)次數(shù)的場景

while 最擅長處理“當某條件滿足時就繼續(xù)”的邏輯,而不是“執(zhí)行 N 次”。

示例:求用戶輸入的數(shù)字之和,直到輸入 0 為止

#include <iostream>
using namespace std;
int main() {
    int num, sum = 0;
    cin >> num;  // 先讀取第一個數(shù)
    while (num != 0) {
        sum += num;  // 加和
        cin >> num;  // 繼續(xù)讀取下一個數(shù)
    }
    std::cout << "總和為:" << sum;
    return 0;
}

4.2 游戲或服務器主循環(huán)

游戲引擎、服務器程序通常使用 while 來維持一個持續(xù)運行的主循環(huán)。

#include <iostream>
using namespace std;
int main() {
    bool isRunning = true;
    int choice;
    while (isRunning) {
        cout << "\n--- 菜單 ---\n";
        cout << "1. 開始游戲\n";
        cout << "2. 設置\n";
        cout << "3. 退出\n";
        cout << "請選擇:\n";
        cin >> choice;
        if (choice == 3) {
              isRunning = false;  // 控制循環(huán)退出
              cout << "再見!" << std::endl;
        }
    }
        return 0;
}

4.3 使用迭代器遍歷容器

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

#include <iostream>
#include <vector>
using namespace std;
int main() {
    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
    return 0;
}

五、do...while循環(huán):至少執(zhí)行一次

當需要先執(zhí)行一次循環(huán)體,再判斷條件時,使用 do...while。

do {
    // 循環(huán)體:無論如何都會先執(zhí)行一次
} while (/*條件*/);

經(jīng)典示例:用戶輸入驗證

#include <iostream>
using namespace std;
int main() {
    int password;
    do {
        cout << "請輸入密碼(1234):";
        cin >> password;
        if (password != 1234) cout << "密碼錯誤!\n";
    } while (password != 1234);
    cout << "登錄成功!" << std::endl;
    return 0;
}

這個場景非常適合 do...while,因為必須讓用戶至少輸入一次密碼,才能判斷對錯。

六、常見死循環(huán)及預防

死循環(huán)是 while 最致命的陷阱,CPU 會占用 100%,程序假死。

6.1 忘記更新循環(huán)變量

int i = 0;
while (i < 5) {
    cout << i << " ";
    // 缺少 i++;  -> 死循環(huán)!
}

6.2 錯誤的分號(;)

while 條件后誤加分號,會導致循環(huán)體為空語句。

int i = 0;
while (i < 5);  // <-- 致命分號!循環(huán)體是空的
{
    cout << i << " ";
    i++;
}
// 程序卡死,永遠進不到花括號里

6.3 有意無限循環(huán)

有時我們需要故意制造無限循環(huán),通常會在循環(huán)體內(nèi)用 break 跳出。

while (true) {
    // 處理任務
    if (exitCondition) break;  // 條件滿足,跳出循環(huán)
}

七、while與for的選擇

特性whilefor
適用場景循環(huán)次數(shù)未知,條件驅動循環(huán)次數(shù)已知,計數(shù)驅動
結構初始化在外部,更新在內(nèi)部初始化、條件、更新集中在頭部
可讀性當邏輯重在某個"狀態(tài)"時,更直觀遍歷固定范圍時更簡潔
典型用法while (exitCondition)for (int i = 0; i < n; i++)

建議: 如果你知道要循環(huán) N 次,用 for;如果你知道在某個條件滿足前要一直循環(huán),用 while

八、總結

  • while 循環(huán):先判斷,后執(zhí)行,可能一次都不執(zhí)行。
  • do...while 循環(huán):先執(zhí)行,后判斷,至少執(zhí)行一次。
  • 核心要素:務必將初始化、條件、更新三要素牢記于心。
  • 防坑指南:警惕分號誤放、更新遺漏導致的無盡循環(huán)。

掌握了 while 的核心理念,你就能在處理文件讀取、用戶交互、狀態(tài)維護等復雜邏輯時,寫出行云流水的代碼。勤加練習,將它變成你編程肌肉記憶的一部分吧!

到此這篇關于C++ 中 while 與 do...while 循環(huán)的完全指南:用法、技巧與避坑的文章就介紹到這了,更多相關C++ while 與 do...while 循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解C++中遞增運算符重載的實現(xiàn)

    詳解C++中遞增運算符重載的實現(xiàn)

    本文主要詳解運算符重載里的遞增運算符重載;遞增和遞減原理是一樣的,這里就只分享遞增的重載;提到遞增遞減,我們都知道又前置和后置兩種方法, 那今天就詳解一下前置遞增和后置遞增的細節(jié),拿捏遞增運算符重載
    2022-06-06
  • C語言文件操作與相關函數(shù)介紹

    C語言文件操作與相關函數(shù)介紹

    文件(file)一般指存儲在外部介質(zhì)上數(shù)據(jù)的集合,比如我們經(jīng)常使用的.txt, .bmp, jpg. .exe,.rmvb等等,下面這篇文章主要給大家介紹了關于C語言文件操作的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • C語言二維數(shù)組幾種常用的表示方法

    C語言二維數(shù)組幾種常用的表示方法

    今天小編就為大家分享一篇關于C語言二維數(shù)組幾種常用的表示方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C語言實現(xiàn)掃雷游戲(可以自動展開)

    C語言實現(xiàn)掃雷游戲(可以自動展開)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷游戲,可以自動展開,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • c++11新特性多線程操作實戰(zhàn)

    c++11新特性多線程操作實戰(zhàn)

    這篇文章主要介紹了c++11新特性多線程操作實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 如何讓C++函數(shù)返回值死心塌地為你工作

    如何讓C++函數(shù)返回值死心塌地為你工作

    這篇文章主要介紹了如何讓C++函數(shù)返回值死心塌地為你工作,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Jsoncpp的安裝與使用方式

    Jsoncpp的安裝與使用方式

    JsonCpp是一個用于解析和生成JSON數(shù)據(jù)的C++庫,它支持解析JSON文件或字符串到C++對象,以及將C++對象序列化回JSON格式,安裝JsonCpp可以通過命令安裝,默認安裝動態(tài)庫,JsonCpp的使用主要涉及三個類:Json::Value用于表示JSON值
    2025-01-01
  • OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析

    OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析

    這篇文章主要介紹了OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析,需要的朋友可以參考下
    2015-01-01
  • 使用?Visual?Studio?2022?開發(fā)?Linux?C++?應用程序的過程詳解

    使用?Visual?Studio?2022?開發(fā)?Linux?C++?應用程序的過程詳解

    Visual?Studio?2022?引入了用于?Linux?C++?開發(fā)的本機?WSL2?工具集,可以構建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開發(fā)?Linux?C++?應用程序,需要的朋友可以參考下
    2021-11-11
  • C++深入刨析類與對象的使用

    C++深入刨析類與對象的使用

    類和對象是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲在內(nèi)存中—個可以擁有在某個范圍內(nèi)的可變存儲區(qū)域
    2022-05-05

最新評論

琼海市| 綦江县| 石泉县| 泸西县| 丹东市| 韩城市| 化德县| 阿坝| 普宁市| 罗城| 楚雄市| 肥城市| 宁化县| 龙江县| 阜新市| 鄂托克前旗| 营口市| 许昌市| 大名县| 东城区| 瑞丽市| 额尔古纳市| 新巴尔虎右旗| 望江县| 亚东县| 西乌珠穆沁旗| 田林县| 宜兴市| 简阳市| 曲阳县| 河曲县| 汤阴县| 抚宁县| 吉水县| 略阳县| 沙河市| 长岭县| 靖安县| 清流县| 怀远县| 衡南县|