close

------

本章重點,理解switch的結構,了解如何依判斷式範圍判斷答案

------

程式設計初學者應該會碰到下面這個難題,if-else依變數範圍作條件判斷很值觀(如下式):
if(input<50){...;}
else if(input>=51){...;}
else if(input<100){...;}
else{...;}
但是卻發現轉成switch會卡住(下式是不合法的):
switch(input){
case input<50: ...;
case input>=51: ...;
case input<100: ...;
default: ...;
}

其實是因為switch裡,case後面接的是「被判斷值」而不是「條件式」,所以把範圍寫在case後面是不給過的。正確寫法如下:
switch( (input<50)?1:(input>=51) ?2:(input<100)?3:4 ){
case 1: ...;
case 2: ...;
case 3: ...;
default: ...;
}

這裡還要提到的是「條件敘述(condition)」和「條件運算式(condition expressions)」是不同的,if括弧內的是完整的條件敘述,但是switch括弧內的是「需要回傳值的條件運算式」
因此正確寫法是用if條件運算式的方式將範圍寫在switch的括弧內。

----------------------------本章要點結束,以下是if跟switch的詳細比較-----------------------------

課本通常會這麼介紹C語言裡的switch結構:
switch ( 條件運算式 ) {
    case 符合條件的「數字或字元」:
        陳述句一;
        break;
    case 符合條件的「數字或字元」:
        陳述句二;
        break;
    default:
        陳述三;
}

然而請注意:「case後面判斷條件的值」其實相當於if「==後面的值」,為了方便思考可以把「case的位置」想成「邏輯運算子(==,<=,>=,!=)」
所以當(x=2;)時,if-else-if寫法真正的結構應該如下:
if(x==1){
printf("One");
}else if(x==2){
printf("Two");
}else{
printf("Others");
}
相當於switch的結構(注意顏色相同的部分):
switch(x){
  case 1 :
    printf("One");
  case 2 :
    printf("Two"); 
  default:
    printf("Others");
}

----------------------------本章要點結束,附上R語言寫法-----------------------------

x=1;
​​​​​switch( x,"One","Two","Others"); //答案顯示"One",R語言switch會把x值當作case的序數做判斷,也可以讓x指定字元判斷。
switch( ifelse(x>1,1,2 ),"One","Two","Others") //答案顯示"One"

arrow
arrow
    文章標籤
    程式設計 R語言 R language
    全站熱搜
    創作者介紹
    創作者 Kuihao 的頭像
    Kuihao

    溫暖午後的金針田__孕育有趣的創新

    Kuihao 發表在 痞客邦 留言(0) 人氣()