星期日, 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 則留言:

Terces Tsai 提到...

我想到了! 用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;
}

羅澤揚 提到...

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

羅澤揚 提到...

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

Terces Tsai 提到...

被自己誤導啦 XD