#include <stdio.h>
int main(void) {
int i = 0, s = 0;
do {
if (i % 2) {
i++;
continue;
}
i++;
s += i;
} while (i < 5);
printf("%d\n", s);
return 0;
}
關鍵在於理解 `continue` 在 `do-while` 中的行為:它會**跳過本次迴圈剩餘敘述,直接跳到 `while` 判斷條件**。
| 迴圈次數 | 開始 i | i%2 結果 | 執行路徑 | i 變化 | s 變化 | 結束 i | 結束 s |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 (假) | 略過 if 區塊 → i++ → s+=i | 0→1 | 0→1 | 1 | 1 |
| 2 | 1 | 1 (真) | 進入 if → i++ → continue → 跳過 s+=i | 1→2 | 不變 | 2 | 1 |
| 3 | 2 | 0 (假) | 略過 if → i++ → s+=i | 2→3 | 1→4 | 3 | 4 |
| 4 | 3 | 1 (真) | 進入 if → i++ → continue → 跳過 s+=i | 3→4 | 不變 | 4 | 4 |
| 5 | 4 | 0 (假) | 略過 if → i++ → s+=i | 4→5 | 4→9 | 5 | 9 |
迴圈在 `i` 變為 5 時結束(`i < 5` 為假),最終輸出 s = 9。
誤區:以為 `continue` 後面的 `i++` 和 `s+=i` 永遠不會執行。
事實:`continue` 只影響**當次**迴圈。當 `i` 為偶數時,`if (i%2)` 為假,**不會進入 if 區塊**,因此會正常執行後面的 `i++` 和 `s+=i`。只有當 `i` 為奇數時,才會觸發 `continue` 跳過累加。
同樣邏輯用 `while` 迴圈更直觀:
int i = 0, s = 0;
while (i < 5) {
if (i % 2 == 0) { // 偶數才累加
i++;
s += i;
} else { // 奇數只遞增 i
i++;
}
}
這個範例完美展示了 `continue` 在迴圈中的跳轉機制,是掌握流程控制的優秀練習題。