多路判斷語法Switch
初寫:2003.04.20, 更新日期:2017.05.24
 
作者:曾聖超老師
 
這種switch-case結構,曾在Algo1語言上使用。

雖然使用 if-else語法可以達到許多條件設定目的,
但是,if-else在閱讀上,對於初學者來說稍嫌吃力,
C 提供另一種結構:switch(開關)。

根據變數或運算式的整數結果,來提供判斷選擇的分支處理,
就好比是旋轉的按鈕。
許多工程師在做條件處理時,可以依照傳回值的分類,有系統的去作設定處置。
因為只有整數能提供精確快速的判斷,也可以使用char型態。
  • switch 語法格式
    switch ( 運算式 或 變數)
    {
       case 運算結果1: //case 和運算結果數值的中間需空一格space.
              程式區A;
              break;

       case 運算結果2:
              程式區B;
              break;

       case 運算結果3:
              程式區C;
              break;
            ...
       default: //當上述情況都不符, 執行default
              程式區;
              break;
    } // ← 最後不用再加上";"
     
  • 範例一
    #include <stdio.h>
    main()
    {
       int n;
       printf("n(1~6)=");
       scanf("%d",&n);
       switch(n)
       {
            case 1:   printf(" A \n");
                          break;
            case 2:   printf(" B \n");
                          break;
            case 3:   printf(" C \n");
                          break;
            case 4:   printf(" D \n");
                            break;
            case 5 ... 10:  printf(" E \n");
                            break;
            default:  printf("請勿輸入其他數值\n");
                          break;
       }
    }
    請輸入1~6,將結果寫下;拿掉break;後,再執行1~6,比較前面的結果。

  • 範例二
    12 星座
    項次 日期 星座 英文
    1  1.20 ~ 2.18 水瓶座  Aquarius
    2  2.19 ~ 3.20 雙魚座  Pisces
    3  3.21 ~ 4.20 牡羊座  Aries
    4  4.21 ~ 5.20 金牛座  Taurus
    5  5.21 ~ 6.21 雙子座  Gemini
    6  6.22 ~ 7.22 巨蟹座  Cancer
    7  7.23 ~ 8.22 獅子座  Leo
    8  8.23 ~ 9.22 處女座  Virgo
    9  9.23 ~ 10.23 天秤座  Libra
    10  10.24 ~ 11.22 天蠍座  Scorpio
    11  11.23 ~ 12.21 射手座  Sagittarius
    12  12.22 ~ 1.19 魔羯座  Capricorn

    13 星座
    項次 日期 星座 英文
    1 12.18 ~ 1.18 射手座  Sagittarius
    2 1.19 ~ 2.15 魔羯座  Capricorn
    3 2.16 ~ 3.11 水瓶座  Aquarius
    4 3.12 ~ 4.18 雙魚座  Pisces
    5 4.19 ~ 5.13 牡羊座  Aries
    6 5.14 ~ 6.20 金牛座  Taurus
    7 6.21 ~ 7.19 雙子座  Gemini
    8 7.20 ~ 8.19 巨蟹座  Cancer
    9 8.20 ~ 9.15 獅子座  Leo
    10 9.16 ~ 10.30 處女座  Virgo
    11 10.31 ~ 11.22 天秤座  Libra
    12 11.23 ~ 11.29 天蠍座  Scorpio
    13 11.30 ~ 12.17 蛇夫座  Ophiuchus

    請寫一個程式,只要輸入出生月、日,會輸出對應英文星座(asterism)。

  • 比較:
    • 有無break的差異。
    • default部分可有可無。
     
  • 技巧用法
    • switch中最多可有256個case
    • 通常再作switch判斷時,可以讓數個case的值累積,
      待最後一個case才執行你要作的工作。

  • 說明: 累積的case,亦可來判斷是否為數字(Dev C codes)
    #include <stdio.h>
    #include <stdlib.h>
    main()
    {  int getch;
       printf("Input char:");
       scanf("%c",&getch);
       switch(getch) {
          case '1':  case '2':  case '3':  case '4':  case '5':
          case '6':  case '7':  case '8':  case '9':  case '0':
              printf("你輸入的數字是 %c\n",getch);
              break;
          default:
              printf("你輸入的不是數字!\n");
              break;
       }
      system("PAUSE");
      return 0;
    }


參考資料: