私のスイッチでは、number_of_cases-1
自分で数字を書かずに、ケースを0から()に変更したいと思います。そのため、途中で1つのケースブロックを削除すると、次のケースの番号が付け直され(1ずつ減り)、スイッチが再びfrom(0..caseNo-1
)になります。
このように(もちろん、i++
コンパイル時間は不明であるため、コンパイルされません):
#include <iostream>
#define ALWAYS_SECOND_CASE 1
void nop(char c){}
int main()
{
int i=0;
int var=ALWAYS_SECOND_CASE;
switch(var)
{
case i++: //case 0:
nop('x');
break;
case i++: //case 1:
nop('y')
break;
case i++: //case 2:
nop('z')
break;
}
//case 1 should have been switched to, nop('y') called.
}
ここで、真ん中のケースを削除します。何も書かずに、最後のケースをケース2からケース1に変更する必要があります。
#include <iostream>
#define ALWAYS_SECOND_CASE 1
void nop(char c){}
int main()
{
int i=0;
int var=ALWAYS_SECOND_CASE;
switch(var)
{
case i++: //case 0:
nop('x');
break;
case i++: //case 1: instead of case 2 like before
nop('z')
break;
}
//case 1 should have been switched to, nop('z') called,
// instead of nop('y') like before.
}
変数が多すぎるため、変数を使用できません。その場合、シンボリック定数は一定すぎます。私はできますがSYMC+1
、できませんSYMC++
。それで、多分列挙型、またはいくつかの素晴らしいマクロ関数?
編集if-elseのヒントをありがとう、私はちょうどケース値がコンパイル時に知られているので、スイッチを使用する方が良いだろうと思いました。
そして、私がやりたいことを指定するには:メニューがありますchar[rows][cols]={"first line","second line"}
。スイッチケースを行にマップしたいので、メニューから行を削除したい場合(行番号に続いて減少します)、プログラムの残りの部分で1つのケースを削除します。