while 迴圈


C++ 提供 while 迴圈式,根據指定的條件式來判斷是否執行迴圈本體,語法如下所示:

while(條件式) {
    陳述句一;
    陳述句二;
}

如果迴圈本體只有一個陳述句,{} 可以省略不寫(但不建議);while 像是沒有起始陳述與終止陳述的 for 迴圈,常用於重複性的動作,而停止條件未知何時發生的情況。

例如一個使用者輸入介面,使用者可能輸入 10 次,也可能輸入 20 次,這時迴圈停止的時機是未知的,可以使用 while 迴圈來做這個事。

一個計算輸入成績平均的程式如下所示:

#include <iostream> 
using namespace std; 

int main() { 
    int score = 0; 
    int sum = 0; 
    int count = -1; 

    while(score != -1) { 
        count++; 
        sum += score; 
        cout << "輸入分數(-1結束):"; 
        cin >> score; 
    } 

    cout << "平均:" 
         << static_cast<double>(sum) / count 
         << endl; 

    return 0; 
}

執行結果:

輸入分數(-1 結束):10
輸入分數(-1 結束):20
輸入分數(-1 結束):30
輸入分數(-1 結束):40
輸入分數(-1 結束):50
輸入分數(-1 結束):-1
平均:30

在這個程式中,使用者的輸入次數是未知的,使用 while 迴圈來判斷使用者的輸入是否為 -1,以作為迴圈執行的條件。

while 迴圈也稱為前測式迴圈,因為在迴圈執行前就會進行條件判斷,而 do while 稱為後測式迴圈,它會先執行迴圈本體,然後再進行條件判斷,do while 的語法如下所示:

do {
    陳述句一;
    陳述句二;
    ....
} while(條件式);

注意 do while 是以分號(;)作為結束,這個很常被忽略;由於 do while 會先執行迴圈,通常用於進行一些初始化或介面溝通的動作,例如下面這個程式:

#include <iostream> 
using namespace std; 

int main() { 
    int input = 0; 
    bool replay = false; 

    do { 
        cout << "輸入整數值:"; 
        cin >> input; 
        cout << "輸入數為奇數?" << (input % 2 ? 'Y': 'N') << endl; 
        cout << "繼續(1:繼續 0:結束)?"; 
        cin >> replay; 
    } while(replay); 

    return 0; 
}

執行結果:

輸入整數值:11
輸入數為奇數?Y
繼續(1:繼續 0:結束)?0