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

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

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

一、引言

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

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

二、基礎(chǔ)語(yǔ)法

while 循環(huán)的語(yǔ)法非常簡(jiǎn)單,它只關(guān)心一個(gè)條件:

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

執(zhí)行流程:

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

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

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

讓我們從一個(gè)最簡(jiǎn)單的例子開(kāi)始——打印 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)
    }
    // 代碼會(huì)輸出:1 2 3 4 5
    return 0;
}

要點(diǎn)解析:

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

四、while的常見(jiàn)應(yīng)用場(chǎng)景

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

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

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

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

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

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

#include <iostream>
using namespace std;
int main() {
    bool isRunning = true;
    int choice;
    while (isRunning) {
        cout << "\n--- 菜單 ---\n";
        cout << "1. 開(kāi)始游戲\n";
        cout << "2. 設(shè)置\n";
        cout << "3. 退出\n";
        cout << "請(qǐng)選擇:\n";
        cin >> choice;
        if (choice == 3) {
              isRunning = false;  // 控制循環(huán)退出
              cout << "再見(jiàn)!" << 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++;  // 移動(dòng)迭代器
    }
    // 代碼會(huì)輸出:10 20 30 40 50
    return 0;
}

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

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

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

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

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

這個(gè)場(chǎng)景非常適合 do...while,因?yàn)楸仨氉層脩糁辽佥斎胍淮蚊艽a,才能判斷對(duì)錯(cuò)。

六、常見(jiàn)死循環(huán)及預(yù)防

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

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

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

6.2 錯(cuò)誤的分號(hào)(;)

while 條件后誤加分號(hào),會(huì)導(dǎo)致循環(huán)體為空語(yǔ)句。

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

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

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

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

七、while與for的選擇

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

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

八、總結(jié)

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

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

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

相關(guān)文章

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

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

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

    C語(yǔ)言文件操作與相關(guān)函數(shù)介紹

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

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

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

    C語(yǔ)言實(shí)現(xiàn)掃雷游戲(可以自動(dòng)展開(kāi))

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

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

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

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

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

    Jsoncpp的安裝與使用方式

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

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

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

    使用?Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序的過(guò)程詳解

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

    C++深入刨析類(lèi)與對(duì)象的使用

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

最新評(píng)論

四平市| 虎林市| 泉州市| 称多县| 枞阳县| 台州市| 大安市| 萨嘎县| 门头沟区| 新化县| 株洲县| 浦江县| 梅河口市| 台北县| 昭通市| 甘泉县| 周至县| 页游| 汽车| 塔城市| 西畴县| 石棉县| 虹口区| 禄劝| 平舆县| 容城县| 阳东县| 万载县| 仁布县| 广宗县| 佛坪县| 冷水江市| 共和县| 江阴市| 宽城| 宝鸡市| 酉阳| 松原市| 怀宁县| 临澧县| 个旧市|