在上一篇教學初學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: