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

Multiple OR or AND conditions in IF statement

本文关键字:OR AND 条件 语句 IF      更新时间:2023-10-16

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

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

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

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

根据c++标准

1 The &操作符从左到右分组。操作数都是上下文转换为bool(第4条)。如果两者都是,结果为真否则操作数为真或假。不像&& &担保从左到右求值:第二个操作数不求值

1 ||运算符将从左到右分组。操作数都是上下文转换为bool(子句4)。如果是,则返回true其操作数的值为真,否则为假。不像|,|保证从左到右的评价;而且,第二个操作数不是

在第一次不匹配时返回"true"。C和c++中的运算符都"短路"。也就是说,当OR操作符的左侧返回true时,它的右侧不会求值。如果左侧返回false,则与运算符将不计算右侧的值。

如果至少满足一个条件,则执行cout << "no";

在这种情况下,如果你的输入是"GUN",程序检查是否:

  • ' g ' != ' s ' -> yes
  • ' u ' != ' u ' -> no
  • ' n ' != ' n ' -> no

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

如果If语句为:

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

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

对于"GUN",它应该是这样的:

  • ' g ' != ' s ' -> yes
  • ' u ' != ' u ' -> no
  • ' n ' != ' n ' -> no

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

:

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