理想的If语句结构为两个布尔值

时间:2011-03-15 22:07:32

标签: language-agnostic if-statement logic

我不太确定要搜索什么 - 但我正在寻找一种优雅的方式,如果可能的话,构造一个使用两个布尔值的if语句,可以轻松输出所有四种可能性。 / p>

变量:

bool a = true;
bool b = true;

我不确定在检查消极性方面是否有最好的做法 - 然后继续等等。

非常草率的例子:

if(!a && !b)
{
   //Output (-,-)
}
else
{
   if(a || b)
   {
       if(a)
       {
           //Output (+,-)
       }
       else
       {
           //Output (-,+)
       }
   }
   else
   {
       //Output (+,+)
   }
}

对不起所有的海鸥之翼( {} )我是一个格式迷。无论如何 - 感谢任何建议!

7 个答案:

答案 0 :(得分:3)

我不完全确定我得到你所要求的......你只是想要if陈述来涵盖所有四种可能性吗?

如果是这样,这里有一个简单的方法:

if (a && b)
    // Output (+, +)
else if (!a && b)
    // Output (-, +)
else if (a && !b)
    // Output (+, -)
else
    // Output (-, -)

如果这不是你想要的,请告诉我,我会删除这篇文章。

答案 1 :(得分:3)

这取决于你如何定义优雅。

所以我会按照自己的定义去做:

  1. 对称。
  2. 可读。
  3. 避免不必要的复杂性。
  4. 考虑到这一点,我只想去:

    if( a ) {
      if( b ) {
         ...
      } else {
         ...
      }
    } else {
      if( b ) {
         ...
      } else {
         ...
      }
    }
    

    它并不比你的想法那么冗长,但至少它清楚地表达了那里的含义。

    话虽如此,我发现像这样的控制结构非常可疑。您可以:

    1. 使用(二维)常量数组来获取值,如果您只是为变量赋值。
    2. 重新整理整个块以避免冗余调用类似的代码。也许可以将其中一个检查分解为函数。
    3. 您可能根本不需要两个单独的布尔值,一个具有4个可能值的变量将更具表现力,然后您可以使用开关/案例结构。

答案 2 :(得分:2)

理想情况下,您根本不会使用if ...

case a, b of
  true, true => "+,+"
| false, true => "-,+"
| true, false => "+,-"
| false, false => "-,-"

如果您想违反公司C编码标准并测试C编译器的优化程序,可以用C表示

switch (((!!a) * 2) + (!!b))
{
  case 3: \\ "+,+"
    break;
  case 2: \\ "+,-"
    break;
  case 1: \\ "-,+"
    break;
  case 0: \\ "-,-"
    break;
}

答案 3 :(得分:0)

以下代码段无法维护。反正

Output(strings[(a ? 2 : 0) + (b ? 1 : 0)])

答案 4 :(得分:0)

我尝试了以下示例,这似乎有效:

result = (name & id) ? "(+,+)" : 
         (!name & !id) ? "(-,-)" : 
         (name & !id) ? "(+,-)" : "(-,+)";

然而 - 我不知道是否有任何方法可以输出值而不是设置变量来包含它们(使用三元运算符)。

答案 5 :(得分:0)

我想你想要这个:

char table[2] = {'-','+'};
printf("(name%c,id%c)",table[!!name],table[!!id]);

喝彩!

答案 6 :(得分:0)

静态分析可用于改进@templatetypedef的答案。我个人更喜欢这个,因为它比@biziclop回答更简洁

if (a && b) {
  // Output (+, +)
} else if (a) {
  // Output (+, -)
} else if (b) {
  // Output (+, -)    
} else {
  // Output (-, -)
}

可以推广到两个以上的变量,例如

if (a && b && c)  {

} else if (a && b) {

} else if (a && c) {

} else if (b && c) {

} else if (a) {

} else if (b) {

} else if (c) {

} else {

}