continue 是 C 語言迴圈控制語句之一,常被初學者與 break 混淆。本文透過一個經典錯誤範例,詳細解析 continue 的執行流程,並指出邏輯錯誤的修正方法。
#include <stdio.h>
void main() {
int k = 1, s = 0;
do {
if ((k % 2) != 0) continue;
s += k;
k++;
} while (k > 10); // 邏輯錯誤點
printf("s=%d", s);
}
k=1, s=0。k % 2 != 0 (1 % 2 = 1),條件成立,執行 continue。s+=k; k++; 不執行),直接跳轉到 while 判斷條件 (k > 10)。k 仍為 1,1 > 10 為假 (0)。s=0。原碼 while(k > 10) 意圖可能是「當 k 小於等於 10 時繼續」,但寫成了「當 k 大於 10 時繼續」。導致迴圈僅執行一次就結束。
#include <stdio.h>
int main() {
int k = 1, s = 0;
// 修正:迴圈條件應為 k <= 10
do {
if ((k % 2) != 0) { // k 為奇數
k++; // 必須在 continue 前遞增 k,否則會形成死迴圈
continue; // 跳過累加,進入下一輪
}
s += k; // 累加偶數
k++;
} while (k <= 10); // 修正條件
printf("1 到 10 之間的偶數和 s = %d\n", s); // 輸出 2+4+6+8+10 = 30
return 0;
}
| 特性 | continue | break |
|---|---|---|
| 作用範圍 | 僅結束「本次」迴圈迭代 | 立即結束「整個」迴圈 |
| 後續執行 | 跳至迴圈條件判斷 (for 的更新部份) | 跳至迴圈結束後的第一行程式碼 |
| 適用場景 | 跳過特定條件的資料處理 | 找到目標或發生錯誤需強制退出 |
在 for 迴圈中,continue 會執行迴圈的「更新運算式」 (第三部分),但在 while 或 do-while 中,continue 不會 自動執行計數器遞增語句。若在 continue 前未更新計數器,極易造成死迴圈。請參考修正版中 k++ 置於 continue 之前的寫法。