问号运算符的多个语句

use*_*930 0 c++

我有两个变量

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.

但是我在每种情况下都要做多个语句.

我怎么用这个呢?:三元运算符?

提前致谢

Pau*_*l R 5

您可能想要考虑将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++中都可以正常工作.它也无论abintS或enumS(注意,您可以在选择微距使用实际的枚举标签-你不需要使用字面常量).

  • @ user2746930适合您的答案是:不要使用三元运算符. (2认同)