C++のSwitch文で範囲指定って出来ますか?

解決


ご飯ですよ  2005-08-22 10:10:10  No: 58705  IP: 192.*.*.*

最近C++(VC++)を使い始めたんですが、疑問があります。
VBだと
select (〜)
case 1 to 10
    ・・・
case Is >= 11
    ・・・
End Select

という書き方が出来ますが、C++でこれに近い書き方って出来ますか?
今のところ、
case 1
    ・
    ・
case 10
    ・・・・
    break;

という方法しかないようですが、どなたかスマートな方法ありましたら
教えてください。VBの考えを捨てろという指摘はあると思いますが、
もしあれば便利だと思って質問しました。

編集 削除
Blue  2005-08-22 10:14:24  No: 58706  IP: 192.*.*.*

> という書き方が出来ますが、C++でこれに近い書き方って出来ますか?
はできませんね。

> どなたかスマートな方法ありましたら
テーブル(1〜10の値はTRUE、11以上はFALSEみたいな配列)を使うとかそういう方法しかないようです。
# 2パターンしかないようならif〜elseでいいですが。

編集 削除
ご飯ですよ  2005-08-24 09:15:09  No: 58707  IP: 192.*.*.*

回答ありがとうございます。

>テーブル(1〜10の値はTRUE、11以上はFALSEみたいな配列)を使うとかそういう方法しかないようです。

とありますが、ちょっとイメージが掴めないのですが、これはどういう事なのでしょうか?出来れば使い方のサンプルを教えていただけると助かります。

編集 削除
KING・王  2005-08-24 12:39:57  No: 58708  IP: 192.*.*.*

配列ではないでが、判別用の関数を用いるとか。。。
例えば、こんな感じで。

#define OUT_OF_RANGE 99

int CheckRange( int data ){
    if( data <= 10 ){
        return data;
    }else{
        return OUG_OF_RAMGE;
    }
    
}

(略)
    switch( CheckRange(〜) ){
    case 1:
        ・・・
        break;
    case 2:
        ・・・
        break;
    (略)
    case 10:
        ・・・
        break;
    case OUT_OF_RANGE:
        ・・・
        break;
    }
(略)

編集 削除
まきじ  2005-08-24 12:53:23  No: 58709  IP: 192.*.*.*

switch 使うのだったら

switch(val){
case 1: break;
case 2: break;
  :
  :
case 10: break;
default:
}

で良いのでは?

で、配列の場合だと

const int MAX = 1000;
bool check[MAX] = {false};
for(int i = 1; i <= 10; i++) check[i] = true; 

if(check[n]){
    処理
}

な感じかな?

編集 削除
PATIO  2005-08-26 16:14:27  No: 58710  IP: 192.*.*.*

というか、素直にif文を使っても大して違わないような気がしますけれど。
VCでコードを書いているんですし、VCなりに見やすい書き方をする癖をつけた方が
多分、良いと思います。無理にVB的な書き方をしてもVCのコードとして
見づらくなるのであれば結果的には良くないと思いますし。
特に仕事でやるのであれば、ソースやアルゴリズムの見易さは大切です。
仕事でコードを書く場合、他の人にも見やすい事を要求されますから
一般的にVCで書くコードから大きく外れたコードを書いてもメリットは
ほとんど無いと思いますよ。

「郷に入っては郷に従え」です。

編集 削除
ご飯ですよ  2005-08-27 13:45:07  No: 58711  IP: 192.*.*.*

みなさん色々ありがとうございます。
確かに無理にVBのフォーマットにあわせる必要は無いですね。
個人的にはVBのSELECTの書き方がすっきりしてて好きなんですが、
無理にVCでやる必要はないですね。
お世話になりました。

編集 削除