THE switch-case 多方案切換條件判斷跳躍
多方案切換條件判斷跳躍 switch-case指令,能夠參考條件變數值variable,依變數值等於那一個常數值constant1,決定切換跳躍到該常數對應的方案case的程式段去執行。
多方案切換條件判斷跳躍 switch-case指令,能夠參考條件變數值variable,依變數值等於那一個常數值constant1,決定切換跳躍到該常數對應的方案case的程式段去執行。
雖然利用巢狀if-else,也可以達成相同目的,亦即依據多種條件組合執行多種不同的程式段。但是不論是執行效率,或是程式架構的簡單明白考量上,switch 指令都會比巢狀if-else乾淨利落。switch-case的流程圖可以看到,他可選擇的箭頭指引路徑可以超過2個以上。
Switch-case 流程圖
以下為 switch-case的原型
switch (variable){
case constant1:
statement sequence1
break;
case constant2:
statement sequence2
break;
:
default:
default statement sequence
}
當 variable == constant(n)時會執行statement sequence(n)當所有的case都不成立時,會執行default:後的default statement sequence。與if-else的判斷式不一樣,switch只判斷相等與否,而if-else則包含大於小於等組合。Switch-case 指令很適合做多重選擇的判斷,例如以下的範例:
範例:大學年級的英文名稱
#include "c4mlib.h" //引入ASA Seriesc函式庫
#include "math.h" //引入math,h函式庫
#include "stdlib.h" //引入stdlib函式庫
int main(void)
{
C4M_DEVICE_set(); //執行ASAM128板初始設定
int i;
printf("How many years have you studied in college?\r");
scanf("%d",&i);
switch(i){
case 1:
printf("you are freshman.\n");
break;
case 2:
printf("you are Sophomore.\n");
break;
case 3:
printf("you are Junior\n");
break;
case 4:
printf("you are Seniors.\n");
break;
default:
printf("you are not Undergraduate student.\n");
}
return 0;
}
顯示結果
輸入1-4→按enter→顯示出各年級結果,當是1-4以外數字時就顯示其他結果
switch的使用也一樣很有彈性。
case的數目可以高達127種。default: ,break; 等指令則可有可無。
case constant(n): 後的statement sequence(n)可以整個拿掉。
當沒有default:時,switch沒有任何case成立時,會不執行任何動作直接離開switch。
當在statement sequence(n)後的break;不見時程式會當成後面的 case constant(n+1)成立加以執行。
當case constant(n): 後的statement sequence(n)也可以整個拿掉時,當CASE成立時不會做什麼事。
由於具有彈性,程式寫作可以不光只有一對一的寫法,可以寫出一些有變化性的程式。例如拿掉了 constant1後的 break 則在variable==constant1時會先執行constant1內的程式碼之後繼續執行variable==constant2內的程式碼直到遇到 break。