我有两个变量
int a, b ;
Run Code Online (Sandbox Code Playgroud)
a并且b可以具有任何值0- 3并且基于a和b的值,每个条件应该有几个句子.
我使用嵌套开关:
switch(a)
{
case go:
{
switch(b)
{
case go: {...}
...
case write: {...}
}
}
...
case 3:
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我也有
enum
{
go = 0 ;
wait =1 ;
read = 2;
write =3 ;
}
Run Code Online (Sandbox Code Playgroud)
我有一个非常大的嵌套开关来检查所有4*4 = 16条件
我想用问号? :运算符来实现
就像是
(a=b==0) ? Do something ? Do something.
但是我在每种情况下都要做多个语句.
我怎么用这个呢?:三元运算符?
提前致谢
您可能想要考虑将4 x 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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这在C和C++中都可以正常工作.它也无论a和b是intS或enumS(注意,您可以在选择微距使用实际的枚举标签-你不需要使用字面常量).