首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

深入理解 C 語言 continue 語句的作用與常見陷阱

     編輯:C 語言問答

前言

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);
}

執行流程逐步追蹤

  1. 初始化:k=1, s=0。
  2. 進入 do-while 迴圈:無條件執行一次迴圈主體。
  3. 判斷條件:k % 2 != 0 (1 % 2 = 1),條件成立,執行 continue。
  4. continue 作用:跳過本次迴圈剩餘語句 (即 s+=k; k++; 不執行),直接跳轉到 while 判斷條件 (k > 10)。
  5. 條件判斷:k 仍為 1,1 > 10 為假 (0)。
  6. 迴圈結束:跳出迴圈,印出 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 vs break 核心差異

特性continuebreak
作用範圍僅結束「本次」迴圈迭代立即結束「整個」迴圈
後續執行跳至迴圈條件判斷 (for 的更新部份)跳至迴圈結束後的第一行程式碼
適用場景跳過特定條件的資料處理找到目標或發生錯誤需強制退出

避坑指南:continue 之後的計數器更新

在 for 迴圈中,continue 會執行迴圈的「更新運算式」 (第三部分),但在 while 或 do-while 中,continue 不會 自動執行計數器遞增語句。若在 continue 前未更新計數器,極易造成死迴圈。請參考修正版中 k++ 置於 continue 之前的寫法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved