否定包含 && 运算符的表达式

Negate expression containing && operator

本文关键字:表达式 运算符 包含      更新时间:2023-10-16

我正在制作一个老虎机,直到所有三个std::string具有相同的。我很困惑,为什么在这段代码中,|| operator给出了期望的结果,而不是&& operator

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

停止条件应为:

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

然而,在布尔代数中,!(slotB == slotC && slotB == slotA)等于slotB != slotC || slotB != slotA

这个规则叫做德摩根定律

(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))

我认为如果使用&&(and)操作符,可能会导致两个字符串相同而第三个字符串不同,这可能会使循环条件失败。

slotAslotB可能相等,这使得slotA != slotB是一个假语句,它将从循环中退出。但是当你使用||条件时,slotC != slotB为真,并继续循环。

注意:这是一种可能,但可能不是真正的原因。