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

C語言跳轉控制語句詳解:break、continue、goto 正確用法與陷阱

     編輯:關於C語言

前言:結構化程式設計的「受控跳轉」

C 語言提供 break、continue、goto 三種跳轉語句。前二者是結構化迴圈/開關的標準控制流,goto 則是無條件跳轉,濫用會導致「義大利麵代碼」。本文詳細解析各語句語義、適用場景與禁忌。

一、break:跳出當層迴圈或 switch

1. 在 switch 中


switch (ch) {
    case 'a': doA(); break;  // 必須 break,否則貫穿執行下一 case
    case 'b': doB(); break;
    default:  doDefault();
}

無 break 會導致「貫穿」,這雖可用於合併 case,但極易誤用。

2. 在迴圈中


while (1) {
    char c = getch();
    if (c == 27) break;  // ESC 鍵跳出無限迴圈
    process(c);
}

通常與 if 結合:滿足條件時提前終止迴圈。

3. 關鍵限制

  • 對 if-else 無效:break 只能跳出 switch、for、while、do-while
  • 多層迴圈只跳一層:
    
    for (int i=0; i<3; ++i)
        for (int j=0; j<3; ++j)
            if (cond) break;  // 只跳出內層 j 迴圈
    
  • 需跳出多層時,使用 goto、標誌變數或重構為函數 return

二、continue:跳過本次迭代,直接進入下一次判斷


for (int i = 1; i <= 10; ++i) {
    if (i % 2 == 0) continue;  // 跳過偶數
    printf("%d ", i);          // 只列印奇數
}

行為差異

迴圈類型continue 後執行流程
while / do-while直接跳到條件判斷
for執行增量運算式,再判斷條件

三、goto:無條件跳轉(請極度謹慎使用)

語法


goto label;
...
label: statement;

合理用場景(極少數)

  1. 多層迴圈緊急跳出:
    
    for (int i=0; i
  2. 錯誤處理集中化(Linux 核心風格):
    
    int foo() {
        if (init1() != 0) goto err1;
        if (init2() != 0) goto err2;
        if (init3() != 0) goto err3;
        return 0;
    
    err3: cleanup2();
    err2: cleanup1();
    err1: return -1;
    }
    

嚴禁場景

  • 向前跳轉構建迴圈(用 for/while)
  • 跳入區塊中間(跳過變數初始化,導致未定義行為)
  • 替代結構化控制流(if/switch/迴圈)

四、綜合範例:鍵盤輸入處理迴圈


#include 
#include 

int main(void) {
    int count = 0;
    while (1) {
        char c = '\0';
        // 內層:讀取一行直到 Enter 或 ESC
        while (c != '\r' && c != 27) {
            c = getch();
            putchar(c);
        }
        if (c == 27) break;  // ESC 跳出外層迴圈
        ++count;
        printf("\nLine %d processed\n", count);
    }
    puts("Program ended.");
    return 0;
}

五、最佳實踐總結

語句推薦程度核心原則
break✅ 推薦只在 switch、迴圈中使用;多層跳出改用函數 return 或標誌變數
continue✅ 推薦用於「衛語句」過濾不需處理的迭代,保持主流程縮排淺層
goto🚫 極度謹慎僅用於多層跳出、錯誤處理集中化;嚴禁構建迴圈、跳入區塊

結語

break 與 continue 是迴圈控制的標準工具,善用它們能讓迴圈邏輯清晰、縮排淺層。goto 是「核武器」——有極少數正當用途(錯誤清理、多層跳出),但 99% 情況下應由結構化控制流取代。紀律:寫 goto 前先思考能否用函數 return 或布林旗標解決。

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