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

解決


ご飯ですよ  2005-08-22 19:10:10  No: 58705

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

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

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


Blue  2005-08-22 19:14:24  No: 58706

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

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


ご飯ですよ  2005-08-24 18:15:09  No: 58707

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

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

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


KING・王  2005-08-24 21:39:57  No: 58708

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

#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 21:53:23  No: 58709

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-27 01:14:27  No: 58710

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

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


ご飯ですよ  2005-08-27 22:45:07  No: 58711

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加