C語言 switch 陳述式教學:基礎語法、範例與常見錯誤解析

1. 前言

在程式設計中常用的「switch 陳述式」,是一個可以簡潔表達條件分岐(多重選擇)的非常便利的工具。在 C 語言中,當需要處理多個選項時,善用「switch 陳述式」可以讓程式碼更加清晰,並減少發生錯誤的機會。本文將從 C 語言中 switch 陳述式的基本用法到實際範例,搭配實際程式碼進行詳細說明。

2. 什麼是 C 語言的 switch 陳述式?

「switch 陳述式」是一種針對特定變數,將其與多個值進行比較,並根據不同值執行相應處理的語法。這通常適用於條件為數字或列舉型別(enum)時。例如,可以簡單地根據使用者選擇的菜單編號來分岐程式的處理流程。

switch (條件) {
case 值1:
// 處理值1
break;
case 值2:
// 處理值2
break;
default:
// 其他未符合條件時的處理
}

在這個語法中,switch 會依據指定表達式的結果,執行對應 case 裡的程式。如果沒有任何 case 符合,則會執行 default,可以用來處理例外狀況或錯誤。

3. switch 陳述式的基本語法

接下來介紹基本的使用範例。以下程式會根據骰子的點數顯示不同訊息。

int main(void) {
int dice = 3;
switch (dice) {
case 1:
printf("擲出 1 點。");
break;
case 2:
printf("擲出 2 點。");
break;
case 3:
printf("擲出 3 點。");
break;
case 4:
printf("擲出 4 點。");
break;
case 5:
printf("擲出 5 點。");
break;
case 6:
printf("擲出 6 點。");
break;
default:
printf("擲出無效點數。");
break;
}
return 0;
}

在這個範例中,當 dice 的值為 3 時,會顯示「擲出 3 點。」。如果輸入了無效的數值,則由 default 處理並顯示「擲出無效點數。」來進行錯誤處理。

4. switch 陳述式範例:菜單選擇

switch 陳述式在根據使用者輸入來執行不同處理時特別實用。以下範例會根據使用者選擇的菜單編號,顯示對應訊息。

int main(void) {
int choice;
printf("菜單:");
printf("1. 漢堡");
printf("2. 披薩");
printf("3. 義大利麵");
printf("請輸入編號: ");
scanf("%d", &choice);

switch (choice) {
    case 1:
        printf("您選擇了漢堡。");
break;
case 2:
printf("您選擇了披薩。");
break;
case 3:
printf("您選擇了義大利麵。");
break;
default:
printf("無效的選擇。");
break;
}
return 0;
}

這個程式會根據使用者選擇的菜單項目顯示不同訊息。使用 switch 陳述式可以讓程式碼簡單易懂,也方便維護。

5. switch 與 if 陳述式的差異:應該怎麼選?

switch 陳述式與 if 陳述式都可以用來條件分岐,但選擇使用時有些不同點。

適合使用 switch 陳述式的場合:

  • 比較的值是固定的,並根據這些值分岐(如:菜單選擇、狀態碼)。
  • 條件簡單,只需要針對特定值執行動作。

適合使用 if 陳述式的場合:

  • 需要處理複雜的條件式(如:範圍判斷、不等號等)。
  • 條件不只是數值,而是需要依邏輯或多個變數進行判斷。

switch 適合單純針對固定值的分岐,if 則更適合複雜或多變的條件。根據實際需求選擇最合適的語法即可。

6. 常見錯誤與避免方法

這裡介紹幾個 switch 陳述式常見的錯誤及解決方法。

1. 忘記寫 break,導致 fall-through(穿透)
break 沒寫時,不只當前 case 會執行,還會繼續執行後面的 case。這稱為「穿透現象」(fall-through),除非特別需要,否則每個 case 後都要加上 break

2. 沒有寫 default 分支
若使用者輸入或發生未預期的值,建議使用 default 分支來做錯誤處理。這樣能減少程式異常行為的風險。

7. switch 與 enum 的應用

進階應用時,可以結合「enum(列舉型別)」與 switch 陳述式。利用 enum 可以用有意義的名稱代替數值,使程式碼更容易理解與維護。

enum Fruit { APPLE, BANANA, ORANGE };
int main(void) {
enum Fruit fruit = BANANA;
switch (fruit) {
    case APPLE:
        printf("您選擇了蘋果。");
break;
case BANANA:
printf("您選擇了香蕉。");
break;
case ORANGE:
printf("您選擇了橘子。");
break;
default:
printf("無效的選擇。");
break;
}
return 0;
}

這個例子使用 enum 定義水果選項,再用 switch 依據選擇進行分岐。使用列舉型別可提升程式的可讀性與維護性。

8. 小結

C 語言中的「switch 陳述式」,特別適合處理固定值的條件分岐。和 if 陳述式相比,更專注於單純值的分岐,讓程式碼簡潔易讀。今後在寫程式時,歡迎多多活用 switch 陳述式,讓你的程式碼更加高效與專業!

年収訴求