我正在制作一台循环播放机,直到所有三个std::string
都具有相同的值。我很困惑为什么在这段代码中|| operator
会提供所需的结果,而不是&& operator
。
std::string slotA,slotB,slotC;
do {
//Fill slotA, slotB and slotC with some data
} while (slotB != slotC || slotB != slotA);
答案 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)
我认为如果你使用&&(和)运算符,有可能两个字符串相同而第三个字符串可能会使你的循环条件失败。
即。 slotA
和slotB
可能与我相同,这会使slotA != slotB
成为一个错误的陈述,它会从循环中出来。但是当你使用||
条件时slotC != slotB
为真,它会继续循环。
注意:这是可能性之一,但可能不是实际原因。