while 迴圈是 C 語言最基礎的「前測試」迴圈:先判斷條件,為真才執行體。其簡潔語法與靈活條件判斷,使其成為不定次數迭代的首選工具。
while (expression) statement;

expression。statement → 回步驟 1。#include <stdio.h>
int main(void) {
int i = 1, sum = 0;
while (i <= 100) {
sum += i;
i++;
}
printf("%d\n", sum); // 5050
return 0;
}

#include <stdio.h>
int main(void) {
int n = 0;
printf("請輸入一行文字: \n");
while (getchar() != '\n') n++;
printf("字符數: %d\n", n);
return 0;
}
條件 getchar() != '\n' 直接在判斷中完成「讀取+比較」,極為精簡。
任何非零標量值皆為真。例:利用遞減至 0 控制次數。
#include <stdio.h>
int main(void) {
int a = 0, n;
printf("輸入 n: ");
scanf("%d", &n);
while (n--) printf("%d ", a++ * 2);
return 0;
}
n-- 既是條件判斷(非零繼續),又完成計數遞減;a++ * 2 等價 (a*2); a++。
while (i < 10) {
sum += i;
i++;
printf("%d\n", sum);
}
漏寫 { } 會導致只有第一句在迴圈內,其餘僅執行一次——經典 Bug 來源。
| 模式 | 代碼範例 | 說明 |
|---|---|---|
| 計數器 | i=0; while(i<n) { ... i++; } | 已知次數,可改用 for |
| 哨兵控制 | scanf("%d",&x); while(x!=-1) { ... scanf("%d",&x); } | 輸入 -1 結束 |
| EOF 控制 | while((c=getchar())!=EOF) { ... } | 檔案/標準輸入讀取 |
| 旗標控制 | while(!done) { ... if(cond) done=1; } | 布林旗標決定結束 |
while (i < 10); 後面加分號 → 空語句 → 無限迴圈(若體內無副作用)。for 語義更清晰。while 以「條件在前、零次可能」的特性,完美處理不定次數迭代。掌握條件表達式靈活性與大括號規則,能寫出簡潔健壯的迴圈代碼。