發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0023
發信站: ☆清華電機☆ (Fri May 26 09:30:53 1995)
轉信站: star

星星流講座 0023         C 語言教室

第 4 講 之 7            基本的流程控制
                        Topic: switch

有的時候我們會遇上像下面的情形:

                () 開始
                   ↓
             □ 輸入選擇項
                   ↓       是
             ◇ 選擇項為 A? → 功能 A
                   ↓否     是
             ◇ 選擇項為 B? → 功能 B
                   ↓否     是
             ◇ 選擇項為 C? → 功能 C
                   ↓否     是
             ◇ 選擇項為 D? → 功能 D
                   ↓否
                () 結束

如果我們用 if-else 來做,就會像這樣:

/* choose.c */
void A (void);
void B (void);
void C (void);
void D (void);

void main (void)
{
    char c;

    scanf ("%c", &c);
    if (c == 'A')       /* NOTICE: == is not = */
        A ();
    else if (c == 'B')
        B ();
    else if (c == 'C')
        C ();
    else if (c == 'D')
        D ();
}

程式寫成這樣實在是非常嚕囌,這時候可以用 switch-case 來代換上面的程式:

/* choose.c */
void A (void);
void B (void);
void C (void);
void D (void);

void main (void)
{
    char c;

    scanf ("%c", &c);
    switch (c)
    {
        case 'A': A ();
                  break;
        case 'B': B ();
                  break;
        case 'C': C ();
                  break;
        case 'D': D ();
                  break;
        default: break;
     }
}

上面的程式示範了 switch-case 的用法,它把每一種可能的 case 列出來,
然後執行對應的敘述。上面的程式有兩個該注意的地方:一個是 break 這個
指令,另一個是 default 這個 case。

default 的意思就是如果所列出的 case 都不符合時,就執行 default 後的
敘述。break 的意思是中斷 switch 的執行,這是什麼意思呢?我們以下面的
例子來說明:

        switch (c)
        {
            case 'A': A ();
            case 'B': B ();
                      break;
            default: break;
        }

當 c == 'A' 的條件成立的時候,會去執行 A () 這個函數,執行完了之後,
它會繼續執行 B () 這個函數,因為沒有 break 敘述中斷它。會這麼做
的原因很簡單,因為

        switch (c)
        {
            case 'A':
            case 'a': A ();
                      break;
            default: break;
        }

很多時候兩個 case 會對應到同一個東西,所以可以利用 break 與否的特性來達
成我們的目的。