IF语句中的多个OR或AND条件

时间:2014-06-23 12:49:46

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

我对IF声明有一个基本的疑问。 让我们说我希望将字符串SUN与字符数组(大小为3)匹配。

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

cout << "no";

else

cout<< "yes";

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

如果检查了所有条件,检查顺序是否从右到左?

3 个答案:

答案 0 :(得分:7)

根据C ++标准

  

1 &amp;&amp;运营商组从左到右。操作数都是   在上下文中转换为bool(第4条)。如果两者都是如此   操作数是真的,否则是假的。不像&amp;,&amp;&amp;担保   从左到右的评估:第二个操作数是否被评估   第一个操作数是假的。

  

1 ||运营商组从左到右。操作数都是   在上下文中转换为bool(第4条)。如果有的话,它返回true   它的操作数是真的,否则是假的。与|,||不同担保   从左到右的评价;而且,第二个操作数不是   评估第一个操作数的计算结果是否为真。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

  • 'G'!='S' - &gt; YES
  • 'U'!='U' - &gt; NO
  • 'N'!='N' - &gt; NO

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

如果if语句是:

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

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

对于“GUN”,它就像是:

  • 'G'!='S' - &gt; YES
  • 'U'!='U' - &gt; NO
  • 'N'!='N' - &gt; NO

由于有两个NO,程序将执行cout<< "yes";

所以:

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