【问题标题】:Multiple OR or AND conditions in IF statementIF 语句中的多个 OR 或 AND 条件
【发布时间】:2014-08-13 12:31:24
【问题描述】:

我对 IF 语句有一个基本的疑问。 假设我想将字符串 SUN 与字符数组(大小为 3)匹配。

if(arr[0]!='S' || arr[1]!='U' || arr[2]!='N')

cout << "no";

else

cout<< "yes";

是否在 If 语句中检查了所有条件,还是在第一次不匹配时返回 true?

如果所有条件都被检查,检查的顺序是从右到左吗?

【问题讨论】:

  • 你用的是c还是c++?
  • 请注意,它不是真正的 c 风格字符串(无空终止)
  • 这是 C++ 而不是 C。编辑帖子以解决此问题。
  • C 和 C++ 不会“评估”任何特定的方向,在这种情况下它们会 short circuit
  • 这是c++,条件都会被检查,直到第一个条件不满足,然后就掉出来了。 (即它会在第一次评估时短路)

标签: c++ if-statement operators logical-operators


【解决方案1】:

根据 C++ 标准

1 && 运算符从左到右分组。操作数都是 上下文转换为布尔值(第 4 条)。如果两者都为真 操作数为真,否则为假。不像 &, && 保证 从左到右求值:第二个操作数不求值,如果 第一个操作数为假。

1 ||运算符组从左到右。操作数都是 上下文转换为布尔值(第 4 条)。如果有任何一个,则返回 true 其操作数为真,否则为假。与 |、|| 不同保证 从左到右的评估;此外,第二个操作数不是 如果第一个操作数的计算结果为真,则进行评估。

【讨论】:

    【解决方案2】:

    它在第一次不匹配时返回“true”。 C 和 C++ 中的运算符“短路”。也就是说,当左侧返回 true 时,OR 运算符不会评估其右侧。如果左侧返回 false,AND 运算符将不会计算其右侧。

    【讨论】:

      【解决方案3】:

      如果至少满足其中一个条件,则您编写的 if 语句执行 cout &lt;&lt; "no";

      在这种情况下,如果您的输入是“GUN”,程序会检查是否:

      • 'G' != 'S' -> 是
      • 'U' != 'U' -> 否
      • 'N' != 'N' -> 否

      当满足第一个条件时,程序将执行cout &lt;&lt; "no";

      如果 if 语句是:

      if(arr[0]!='S' && arr[1]!='U' && arr[2]!='N')
        cout << "no";
      else
        cout<< "yes";
      

      要执行cout &lt;&lt; "no";,必须满足所有条件。

      对于“GUN”,它会是这样的:

      • 'G' != 'S' -> 是
      • 'U' != 'U' -> 否
      • 'N' != 'N' -> 否

      因为有两个NO,所以程序会执行cout&lt;&lt; "yes";

      所以:

      • ||只需要满足一个条件
      • && 要求满足所有条件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2017-07-29
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多