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 Artical List

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

Article List