在上一篇教學初學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 架構的用途有點類似,但這兩之間還是有所差異,如上述所提,switch架構是判斷一個單一整數,相較於 if - else if - else 判斷每個條件最後得到的值是 True 還是 False,這在應用上和可讀性設計上有很大的差異。
switch 常用於判斷一個會有多種結果的函式值,例如一個函式用於判斷目前得到的IO事件是哪一種。而 if - else if - else 可能用於判斷多個函式處理所得到的值是否為True。
上述有提到 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;
}
Last updated: