私は何かを見ているかもしれませんが、C++では、ケースを個別に書き出すのではなく、グループ化する簡単な方法がありますか?私は基本的に私がちょうどできることを覚えています:
SELECT CASE Answer
CASE 1, 2, 3, 4
C++の例(必要な場合):
#include <iostream.h>
#include <stdio.h>
int main()
{
int Answer;
cout << "How many cars do you have?";
cin >> Answer;
switch (Answer)
{
case 1:
case 2:
case 3:
case 4:
cout << "You need more cars. ";
break;
case 5:
case 6:
case 7:
case 8:
cout << "Now you need a house. ";
break;
default:
cout << "What are you? A peace-loving hippie freak? ";
}
cout << "\nPress ENTER to continue... " << endl;
getchar();
return 0;
}
いいえ。ただし、if
-else if
-else
チェーンは同じ結果を達成します:
if (answer >= 1 && answer <= 4)
cout << "You need more cars.";
else if (answer <= 8)
cout << "Now you need a house.";
else
cout << "What are you? A peace-loving hippie freak?";
また、0台の車の場合と、おそらく例外をスローすることによって負の数の車の予期しない場合を処理することもできます。
PS:変数を大文字で始めるのはスタイルが悪いと考えられているため、Answer
をanswer
に名前を変更しました。
サイドノートとして、Pythonなどのスクリプト言語ではNice if answer in [1, 2, 3, 4]
構文。これは、目的を達成するための柔軟な方法です。
知っている限り、C++で物事をコンパクトにするためにリターンを省略するだけです。
switch(Answer)
{
case 1: case 2: case 3: case 4:
cout << "You need more cars.";
break;
...
}
(もちろん、他の返品も削除できます。)
もちろんできます。
範囲にケースx ... yを使用できます
例:
#include <iostream.h>
#include <stdio.h>
int main()
{
int Answer;
cout << "How many cars do you have?";
cin >> Answer;
switch (Answer)
{
case 1 ... 4:
cout << "You need more cars. ";
break;
case 5 ... 8:
cout << "Now you need a house. ";
break;
default:
cout << "What are you? A peace-loving hippie freak? ";
}
cout << "\nPress ENTER to continue... " << endl;
getchar();
return 0;
}
コンパイラ内で「-std = c ++ 0x」フラグが有効になっていることを確認してください
キーワードcase
は削除できません。しかし、次のように例を短く書くことができます。
switch ((Answer - 1) / 4)
{
case 0:
cout << "You need more cars.";
break;
case 1:
cout << "Now you need a house.";
break;
default:
cout << "What are you? A peace-loving hippie freak?";
}
あなたの例はswitch
コンストラクトで得られるほど簡潔です。
プリプロセッサの悪用の道を進んで進んでいるのであれば、 _Boost.Preprocessor
_ が役立ちます。
_ #include <boost/preprocessor/seq/for_each.hpp>
#define CASE_case(ign, ign2, n) case n:
#define CASES(seq) \
BOOST_PP_SEQ_FOR_EACH(CASE_case, ~, seq)
CASES((1)(3)(15)(13))
_
プリプロセッサのみを実行するために_-E -P
_でgcc
を介してこれを実行すると、CASES
の展開は次のようになります。
_ case 1: case 3: case 15: case 13:
_
これはおそらくコードレビューに合格しないので(私が働いている場所ではないでしょう!)、個人的な使用に制限することをお勧めします。
CASE_RANGE(1,5)
マクロを作成して展開することも可能です。
_ case 1: case 2: case 3: case 4: case 5:
_
あなたにも。
次のように使用できます。
case 4: case 2:
{
//code ...
}
4または2スイッチケースを使用します。
gccには、いわゆる「ケース範囲」拡張子があります。
http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Case-Ranges.html#Case-Ranges
私はgccのみを使用していたときにこれを使用していました。それについて実際に言うことはあまりありません-値の範囲についてだけですが、それはあなたが望むものを並べ替えます。
これの最大の問題は、gccのみがサポートしていることです。これは問題になる場合もあれば、そうでない場合もあります。
(あなたの例では、if
ステートメントがより自然にフィットすると思います。)
いいえ、互換性を壊したいのでなければandがサポートします。