否定表达式包含&&操作者

时间:2016-11-15 11:47:24

标签: c++ loops operators

我正在制作一台循环播放机,直到所有三个std::string都具有相同的值。我很困惑为什么在这段代码中|| operator会提供所需的结果,而不是&& operator

std::string slotA,slotB,slotC; 
do {
    //Fill slotA, slotB and slotC with some data
} while (slotB != slotC || slotB != slotA);

3 个答案:

答案 0 :(得分:14)

你的停止条件应该是:

while (!(slotB == slotC && slotB == slotA));

但是,在Bool-Algebra中,!(slotB == slotC && slotB == slotA)等于slotB != slotC || slotB != slotA

此规则称为De Morgan Law

答案 1 :(得分:4)

(slotB != slotC || slotB != slotA)这是做好工作的好方法。

如果你使用的话,那就是一个小例子:

(slotB != slotC && slotB != slotA)

usuming:

slotA = Banana
slotB = Banana
slotC = Apple

所以:

(slotB  != slotC && slotB  != slotA)
(Banana != Apple && Banana != Banana)
( true && false)
( false )

while循环以错误的猜测结束。

在你的情况下,为一个好的猜测写出条件可能更简单 采取消极的态度,就像Humam Helfawi所说:

 while (!(slotB == slotC && slotB == slotA))

答案 2 :(得分:2)

我认为如果你使用&&(和)运算符,有可能两个字符串相同而第三个字符串可能会使你的循环条件失败。

即。 slotAslotB可能与我相同,这会使slotA != slotB成为一个错误的陈述,它会从循环中出来。但是当你使用||条件时slotC != slotB为真,它会继续循环。

注意:这是可能性之一,但可能不是实际原因。