網頁

星期日, 11月 25, 2012

[C] 用switch/case完全取代if/else if

前一段時間被學弟問到switch有沒有辦法做區間的判斷
例如:
if(input>90)

....

else if(input>80)

...

else if(input>70)

...

else

...



當下的回答是"不行"

因為我的概念裡一直認為switch/case只能做"相等"的判斷

最近用到conditional operator,突然想到其實是有可能的
程式碼如下:

應用就多啦  目前還沒有想到什麼if/else能做到而這樣做不到的
也許各位大大能幫我點出來

雖然對於架構本身似乎沒什麼幫助,可是看起來還滿酷的
樂趣可能就來自這種無聊的小事吧XD

4 則留言:

  1. 我想到了! 用C內建的 "..."

    其實就是va_list啦 ~

    #include

    int main ( void) {

    int n;
    while( 1) {
    scanf("%d", &n);
    if( n < 0) break;
    switch( n) {
    case 0 ... 9 :
    printf("%d: 1 digit number\n", n);
    break;
    case 10 ... 99 :
    printf("%d: 2 digit number\n", n);
    break;
    case 100 ... 999 :
    printf("%d: 3 digit number\n", n);
    break;
    default:
    printf("out of range!\n");
    break;
    }
    }

    return 0;
    }

    回覆刪除
  2. 第一次看到這種用法XD
    原來又是個C99...
    http://stackoverflow.com/questions/7043788/are-triple-dots-inside-a-case-case-0-9-valid-c-language-switch-syntax

    回覆刪除
  3. 而且跟va_list好像是不一樣的東西@@
    http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Case-Ranges.html

    回覆刪除