【问题标题】:How to combine two if statements into one如何将两个 if 语句合并为一个
【发布时间】:2013-07-26 02:00:09
【问题描述】:

嗨,我有这两个单独的 if 语句,当这样放置时;

if (powerlevel <= 0) // <--- ends up having no effect
if (src.health <= 0)
    the_thing_to_do();

如何将这两个 if 语句合并为一个?是否可以?如果有怎么办?

【问题讨论】:

  • 任何学习资源都应该在 if 语句之后很快解决这个问题。
  • “最终没有效果”是什么意思?
  • 只是出于好奇,第一个语句会有什么影响?由于缺少 {},它只会影响第二个 if 语句,对吗?不是 the_thing_to_do?
  • @PunDefeated:the_thing_to_do 由第二个 if 语句控制,因此第一个 if powerlevel 测试控制它(以及可能跟随它的任何 else 语句)。换句话说,这两个 if 有效地形成了一个逻辑和“&&”,使得 the_thing_to_do 仅在两个变量都不是正数时才完成。

标签: c++


【解决方案1】:

如果您希望两个语句都为真,请使用逻辑 AND

if(powerlevel <= 0 && src.health <= 0) 

如果您希望其中任何一个语句为真,请使用逻辑 OR

if(powerlevel <= 0 || src.health <= 0) 

以上两个运算符都是logical operators

【讨论】:

【解决方案2】:

如果您希望同时满足这两个条件,请使用operator&amp;&amp;(逻辑与)

if(powerlevel <= 0 && src.health <= 0) { .. }

operator||,如果你只想满足一个(逻辑或)

if(powerlevel <= 0 || src.health <= 0) { .. }

【讨论】:

    【解决方案3】:

    这取决于您是否希望两者都评估为真......

    if ((powerlevel <= 0) && (src.health <= 0)) {
      // do stuff
    }
    

    ...或至少一个...

    if ((powerlevel <= 0) || (src.health <= 0)) {
      // do stuff
    }
    

    区别是逻辑与(&&)或逻辑或(||)

    【讨论】:

      【解决方案4】:

      如果它是有意义的(有时)只是一个替代品。

      Both true:
      if (!(src.health > 0  || powerlevel > 0)) {}
      
      at least one is true:
      if (!(src.health > 0  && powerlevel > 0)) {}
      

      【讨论】:

        【解决方案5】:

        或者,如果您不想使用 &&,您可以使用三元运算符

        #include <iostream>
        
        int main (int argc, char* argv[])
        {
          struct
          {
              int health;
          } src;
        
          int powerlevel = 1;
          src.health = 1;
        
         bool result((powerlevel <= 0) ? ((src.health <=0) ? true : false)  : false);
        
         std::cout << "Result: " << result << std::endl;
        }
        

        【讨论】:

        • 我真的很喜欢三元运算符,但是(x ? true : false)...?哎呀! ;-)
        • 是的,这有点我同意,但其他人已经建议了 && 版本,我想我只是向他介绍这个概念,因为他要求用一行代码来完成它。跨度>
        猜你喜欢
        • 2014-06-18
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        相关资源
        最近更新 更多