while 迴圈


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

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

如果迴圈本體只有一個陳述句,則 while{} 可以省略不寫,然而基於可讀性,建議還是寫出來;while 主要用於結束條件發生時機無法確定的重複性動作,例如一個使用者輸入介面,使用者可能輸入 10 次,也可能輸入 20 次,這時迴圈停止的時機是未知的,你可以使用 while 迴圈來作這個事。

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

#include <stdio.h>

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

    while(score != -1) { 
        count++; 
        sum += score; 
        printf("輸入分數(-1結束):");
        scanf("%d", &score);
    } 

    printf("平均:%f\n", (double) sum / count ); 

    return 0;
}

執行結果:

輸入分數(-1結束):87
輸入分數(-1結束):77
輸入分數(-1結束):99
輸入分數(-1結束):-1
平均:87.666667

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

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

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

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

#include <stdio.h>

int main(void) {
    int input = 0;
    int replay = 0;

    do {
        printf("輸入整數值:");
        scanf("%d", &input);
        getchar();

        printf("輸入數為奇數?%c\n", ((input % 2) ? 'Y': 'N'));
        printf("繼續(1:繼續 0:結束)?");
        scanf("%d", &replay);
        getchar();
    } while(replay);

    return 0;
}

執行結果:

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