У меня есть две переменные
int a, b ;
a
а также b
может иметь любое значение из 0
—3
и должно быть несколько предложений для каждого условия, основанного на значениях a и b.
Я использовал вложенные ключи:
switch(a)
{
case go:
{
switch(b)
{
case go: {...}
...
case write: {...}
}
}
...
case 3:
{
...
}
}
Также у меня есть
enum
{
go = 0 ;
wait =1 ;
read = 2;
write =3 ;
}
У меня есть очень большой вложенный переключатель, чтобы проверить все условия 4 * 4 = 16
Я хотел бы реализовать, используя знак вопроса ? :
оператор
что-то вроде
(a=b==0) ? Do something ? Do something.
Однако у меня есть несколько заявлений, чтобы сделать в каждом условии.
Как мне сделать это с помощью этого? : троичный оператор?
заранее спасибо
Вместо этого вы можете рассмотреть возможность объединения ваших 4х4 блоков переключателей в один 16-позиционный переключатель:
#define SELECT(a, b) ((a) * 4 + (b))
int select = SELECT(a, b);
assert(a >= 0 && a < 4); // sanity checking - make sure a and b are valid
assert(b >= 0 && b < 4);
switch (select)
{
case SELECT(0, 0):
// ...
break;
case SELECT(0, 1):
// ...
break;
case SELECT(0, 2):
// ...
break;
case SELECT(0, 3):
// ...
break;
case SELECT(1, 0):
// ...
break;
// ...
case SELECT(3, 3):
// ...
break;
}
Обратите внимание, что это нормально работает как в C, так и в C ++. Это также работает независимо от того, a
а также b
являются int
с или enum
s (обратите внимание, что вы можете использовать фактические метки перечисления в макросе SELECT — вам не нужно использовать литеральные константы).
Других решений пока нет …