C 語言 switch-case 條件分支完整教學:語法、範例與常見錯誤解析

1. 前言:什麼是 C 語言的條件分支?

條件分支的重要性與作用

在程式設計中,條件分支扮演著關鍵角色。透過根據特定條件執行不同的處理,可以提升程式的靈活性與效率。

C 語言中的條件分支基礎

在 C 語言中,實現條件分支主要有以下兩種方式:

  1. if-else 敘述
  2. switch-case 敘述

其中,switch-case 敘述能有效處理多個條件,特別適合在存在明確選項的情境中使用。

switch-case 的作用與使用情境

switch-case 敘述是一種根據特定變數值來分支處理的控制結構,常見的應用場景包括:

  • 選單選擇程式
  • 依數值或文字進行分類判斷
  • 簡易狀態管理

使用情境範例

例如,在應用程式中根據選單編號執行不同動作。當使用者輸入「1」時,程式輸出「開始」;若選擇「2」,則輸出「結束」。

學習 switch-case 的好處

  • 程式碼簡潔、可讀性高
  • 分支結構清晰,降低錯誤發生率
  • 提升程式的執行效率

本文將從 switch-case 的基本語法到進階應用與注意事項進行完整解說。藉此深入理解 C 語言的條件分支,並培養實用的程式設計能力。

2. switch-case 的基本語法與使用方法

基本語法

以下是 switch-case 的基本語法:

switch (表達式) {
    case 常數1:
        // 處理1
        break;
    case 常數2:
        // 處理2
        break;
    default:
        // 其他處理
}

程式範例:判斷星期

#include <stdio.h>

int main() {
    int day;
    printf("請輸入星期的數字 (1〜7): ");
    scanf("%d", &day);

    switch (day) {
        case 1:
            printf("星期一n");
            break;
        case 2:
            printf("星期二n");
            break;
        case 3:
            printf("星期三n");
            break;
        case 4:
            printf("星期四n");
            break;
        case 5:
            printf("星期五n");
            break;
        case 6:
            printf("星期六n");
            break;
        case 7:
            printf("星期日n");
            break;
        default:
            printf("輸入無效n");
    }

    return 0;
}

範例重點

  • 每個 case 中必須加入 break,以避免流程錯誤。
  • 使用 default 可以處理不符合條件的輸入。

switch-case 的優點

  • 提升可讀性: 條件分支簡單清晰。
  • 減少程式碼量: 能有效表達針對同一變數的多重判斷。
  • 防止錯誤: 可輕鬆加入對無效輸入的處理。

3. switch-case 的特徵與注意事項

特徵1:簡潔且可讀性高

switch-case 敘述能簡潔地表達多條件分支,使程式碼更具可讀性。

特徵2:專注於整數與字元判斷

switch-case 主要設計用於整數型 (int) 或字元型 (char) 的判斷。

使用注意事項

1. 不要忘記 break

int num = 1;

switch (num) {
    case 1:
        printf("Onen");
    case 2:
        printf("Twon");
    default:
        printf("Othern");
}

輸出結果:

One  
Two  
Other

修正方法:

int num = 1;

switch (num) {
    case 1:
        printf("Onen");
        break;
    case 2:
        printf("Twon");
        break;
    default:
        printf("Othern");
}

2. 只能使用常數

int x = 10;
switch (x) {
    case x:  // 錯誤
        printf("錯誤n");
        break;
}

修正版:

#define VALUE 10
switch (x) {
    case VALUE:
        printf("成功n");
        break;
}

總結

  • 不要忘記 break —— 避免不必要的落入 (fall-through)。
  • 只能使用常數 —— 變數或運算式不能作為 case。
  • 保持結構清晰 —— 善用縮排與註解提升可讀性。

4. if-else 與 switch-case 的比較:該如何選擇?

基本差異

1. 條件判斷方式

  • if-else:用於邏輯運算與範圍條件。
  • switch-case:用於判斷特定的常數值或字元。

比較表

比較項目if-elseswitch-case
條件式可使用邏輯運算與範圍條件僅限整數或字元常數
可讀性條件複雜時較難閱讀多分支情境下更清楚
執行速度可能較慢編譯器可最佳化,執行較快
擴充性可靈活新增條件受限於常數,不易擴充
適用情境適合範圍判斷或複雜邏輯適合明確的值判斷與選單

實際範例

if-else 範例:

int score = 85;

if (score >= 90) {
    printf("優n");
} else if (score >= 70) {
    printf("良n");
} else {
    printf("可n");
}

switch-case 範例:

int grade = 2;

switch (grade) {
    case 1:
        printf("優n");
        break;
    case 2:
        printf("良n");
        break;
    case 3:
        printf("可n");
        break;
    default:
        printf("不可n");
}

5. 應用範例:更靈活運用 switch-case

1. 合併多個 case

char grade = 'A';

switch (grade) {
    case 'A':
    case 'B':
        printf("及格n");
        break;
    case 'C':
        printf("需要補考n");
        break;
    default:
        printf("不及格n");
}

2. 善用 fall-through

int score = 85;

switch (score / 10) {
    case 10:
    case 9:
        printf("優秀n");
        break;
    case 8:
    case 7:
        printf("良好n");
        break;
    default:
        printf("不及格n");
}

3. 巢狀 switch-case

int menu = 1;
int subMenu = 2;

switch (menu) {
    case 1:
        switch (subMenu) {
            case 1:
                printf("子選單1-1n");
                break;
            case 2:
                printf("子選單1-2n");
                break;
        }
        break;
    case 2:
        printf("選單2n");
        break;
}

6. 常見錯誤與解決方法

1. 忘記寫 break

int num = 1;

switch (num) {
    case 1:
        printf("Onen");
    case 2:
        printf("Twon");
    default:
        printf("Othern");
}

解決方法:

int num = 1;

switch (num) {
    case 1:
        printf("Onen");
        break;
    case 2:
        printf("Twon");
        break;
    default:
        printf("Othern");
}

2. 在 case 使用變數

int x = 10;
switch (x) {
    case x:  // 錯誤
        printf("數值是10n");
        break;
}

修正版:

#define VALUE 10
switch (x) {
    case VALUE:
        printf("成功n");
        break;
}

3. 省略 default

int num = 5;

switch (num) {
    case 1:
        printf("Onen");
        break;
    case 2:
        printf("Twon");
        break;
}

解決方法:

switch (num) {
    case 1:
        printf("Onen");
        break;
    case 2:
        printf("Twon");
        break;
    default:
        printf("Othern");
}

7. 總結與下一步

1. 文章重點回顧

  1. 基本語法與使用方法
  • switch-case 是一種依據特定數值分支的便利控制結構。
  • 簡潔明瞭,特別適合明確的條件分支。
  1. 特徵與注意事項
  • 僅能使用整數或字元常數。
  • 務必使用 break 避免意外 fall-through。
  1. 與 if-else 的比較
  • if-else 適合範圍或複雜條件;switch-case 適合明確值的分支。
  • 依需求靈活選擇可提升程式效率。
  1. 應用技巧
  • 合併 case、活用 fall-through、巢狀結構等技巧能提升靈活性。
  1. 常見錯誤與解法
  • 針對 break 遺漏、default 省略等常見問題提出對策。

2. 下一步建議

1. 實作練習
將本文內容應用於以下範例:

  • 計算機程式:利用 switch-case 處理四則運算。
  • 選單應用:設計多層選單並實現操作。
  • 成績管理系統:依分數自動分類等第。

2. 延伸學習
為進一步活用 switch-case,建議深入以下主題:

  • if-else 的進階應用
  • 迴圈結構 (for, while)
  • 函式與結構體

3. 優化與除錯

  • 活用除錯工具:快速定位與修正錯誤。
  • 程式碼審查:透過他人回饋提升品質。

3. 最後總結

switch-case 是 C 語言中高效的條件分支工具。掌握其基礎與應用,不僅能提升程式可讀性,也能讓程式運行更有效率。建議讀者在實際撰寫程式時多加練習,逐步養成良好的程式設計習慣。

年収訴求