0

我有两个变量

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

1 回答 1

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;
}

请注意,这在 C 和 C++ 中都可以正常工作。无论aandbints 还是enums,它都可以工作(请注意,您可以在 SELECT 宏中使用实际的枚举标签 - 您不需要使用文字常量)。

于 2013-10-16T15:33:37.350 回答