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