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

C 語言 switch 實戰:一周食譜選單系統

     編輯:關於C語言

題目情境

輸入 1~7 對應周一至周日,輸出當天食譜;輸入其他數字提示錯誤。

完整程式碼

#include 

int main(void) {
    int day;
    printf("請輸入星期 (1-7):");
    if (scanf("%d", &day) != 1) {
        printf("輸入格式錯誤\n");
        return 1;
    }

    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("錯誤:請輸入 1 到 7 之間的整數\n"); break;
    }
    return 0;
}

switch 關鍵語法解析

元素說明注意事項
switch (expr)判斷式必須為**整數型別** (int, char, enum)不可用 float/double/字串
case 常數:標籤必須為**編譯期常數**不可用變數或範圍
break;跳出 switch,**必須加**否則貫穿刻意貫穿需註解 /* fallthrough */
default:無匹配時執行,**建議永遠加上**位置可放任意處,慣例放最後

進階技巧

1. 多標籤共用程式碼 (貫穿特性)

switch (day) {
    case 1: case 2: case 3: case 4: case 5:
        printf("平日食譜\n");
        break;
    case 6: case 7:
        printf("假日食譜\n");
        break;
    default:
        printf("錯誤輸入\n");
}

2. 字元判斷

char grade;
scanf(" %c", &grade);  // 空白吃掉換行
switch (grade) {
    case 'A': case 'a': printf("優等\n"); break;
    case 'B': case 'b': printf("甲等\n"); break;
    // ...
}

3. 列舉搭配 (編譯器可檢查完整性)

typedef enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } Weekday;
Weekday day = WED;
switch (day) {
    case MON: ... break;
    case TUE: ... break;
    // 若漏寫 case,GCC/Clang -Wswitch-enum 會警告
}

常見錯誤

錯誤代碼問題修正
漏寫 break非預期貫穿,邏輯錯誤加上 break 或標註 /* fallthrough */
case 1.5:浮點數非法改用整數或字元
case n: (n 為變數)非常數標籤改用 if-else 鏈
switch (str)字串非法用 strcmp + if-else 或雜湊表

效能考量

  • case 較少 (≤5) 時,編譯器常生成 **if-else 鏈**。
  • case 較多且數值連續時,生成 **跳轉表**,O(1) 分派,極快。
  • case 數值稀疏時,生成 **二分搜尋決策樹**,O(log n)。

結語

switch 是處理**離散整數值分派**的最佳工具。善用 break、default、多標籤貫穿、列舉配合,能寫出清晰、高效、易維護的分支邏輯。

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