HOME ABOUT CONTACT

C/C++教學: 第九課 - switch結構

Rain July 13, 2024
Outline

1. switch 結構簡介

2. switch 和 if - else if - else 架構差異簡述

3. switch 結構需要注意的點

switch結構簡介top

在上一篇教學初學C/C++ 第八課 - if - else if - else 判斷式結構,我們介紹了 if - else if - else 的結構,本篇將介紹另一個類似的結構,用於判斷多個條件的應用情況。

那麼我們先來看 switch 的基本架構:


switch(int or char) {
    case int or char:
        break;
    case int or char:
        break;
    default:
        break;
}
                    

首先 switch 括號內是判斷的主角,而這個主角可以是整數(int)或字元(char),正確的說法是單一整數

而 case 後面的值代表的是當主角等於這個值時,就會進入這個 case 的處理區塊。而 break 則是宣告該處理區塊已經結束,跳脫出整個 switch 架構。

而 default 是指當以上所有 case 都不符合時,預設會做什麼樣的處理。

我們可以看看下面完整的例子:


int main (int argc, char* argv[]) {
    int i = 1;
    char a = 'A';
    switch (a) {
        case 'A':
            a++;
            printf("The variable is %c\n", a);
            break;
        case 1:
            i++;
            printf("The variable is %d\n", i);
            break;
        default:
            printf("Nothing\n");
    }
    return 0;
}
                        

switch 和 if - else if - else 架構差異簡述top

雖說 switch 架構和 if - else if - else 架構的用途有點類似,但這兩之間還是有所差異,如上述所提,switch架構是判斷一個單一整數,相較於 if - else if - else 判斷每個條件最後得到的值是 True 還是 False,這在應用上和可讀性設計上有很大的差異。

switch 常用於判斷一個會有多種結果的函式值,例如一個函式用於判斷目前得到的IO事件是哪一種。而 if - else if - else 可能用於判斷多個函式處理所得到的值是否為True。

switch結構需要注意的點top

上述有提到 case 中的 break 關鍵字是用來宣告跳脫 switch 區塊,而新手常常會忘記要寫上 break,這會導致什麼結果呢?

這會導致若其中一個 case 達成,程式會一路往下執行其他 case 的處理區塊,結果就會不如預期,如上面範例:


int main (int argc, char* argv[]) {
    int i = 1;
    char a = 'A';
    switch (a) {
        case 'A':
            a++;
            printf("The variable is %c\n", a);
            //break; 若註解此行,則程式會一路往下執行case 1的處理區塊,
            // 直到遇到default關鍵字或switch結尾大括號為止。
        case 1:
            i++;
            printf("The variable is %d\n", i);
            break;
        default:
            printf("Nothing\n");
    }
    return 0;
}
                        

下一篇: 第十課 for迴圈

Last updated:

Related Posts

  1. C/C++教學: 第七課 - 位元運算
  2. C/C++教學: 第八課 - if - else if - else 判斷式結構
  3. C/C++教學: 第十課 - for迴圈