在 C 語言程式設計中,流程控制是決定程式執行邏輯的關鍵。本文重點講解選擇結構中的 switch 語句,並通過實際代碼示例展示其正確用法與常見陷阱。
switch 語句根據運算式的值,跳轉到匹配的 case 標籤執行。其核心結構如下:
switch (運算式) {
case 常量值1:
// 執行語句
break;
case 常量值2:
// 執行語句
break;
default:
// 預設情況
}
以下代碼演示如何使用 switch 實現簡單的加減法選擇:
#include <stdio.h>
int main() {
char operator = '+';
int a = 10, b = 20;
switch (operator) {
case '+': {
int sum = a + b;
printf("和是 %d\n", sum);
break;
}
case '-': {
int diff = a - b;
printf("差是 %d\n", diff);
break;
}
default:
printf("不支援的運算子\n");
}
return 0;
}
在 case 標籤後使用 {} 包裹代碼塊,可建立獨立的變量作用域。這解決了「跳過變量初始化」的編譯錯誤,也避免了變量名衝突。例如上例中 sum 與 diff 互不干擾。
若省略 break,程式會發生「貫穿」現象,繼續執行下一個 case 的代碼。這雖然可用於合併情況(如同時處理 case '+' 和 case '-'),但多數情況下是邏輯錯誤來源。
直接在 case 下定義變量(不加大括號)會導致編譯錯誤:error: jump to case label crosses initialization。因為 switch 本質是跳轉語句,可能跳過初始化語句。
case 代碼塊使用大括號 {}case 以 break 結尾,除非有意貫穿default 處理預期外的輸入| 錯誤類型 | 錯誤代碼 | 正確寫法 |
|---|---|---|
| 缺少作用域 | case '+': int x = 1; break; | case '+': { int x = 1; break; } |
| 漏寫 break | 導致多個 case 連續執行 | 明確添加 break 或註解說明故意貫穿 |
| 運算式類型錯誤 | 使用 float/string | 僅支援整數類型(char, int, enum) |
掌握 switch 的這些細節,能讓你寫出更健壯、可維護的 C 語言程式。選擇結構是程式邏輯的基石,熟練運用它是進階開發的必經之路。