否定包含 && 运算符的表达式
Negate expression containing && operator
我正在制作一个老虎机,直到所有三个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)操作符,可能会导致两个字符串相同而第三个字符串不同,这可能会使循环条件失败。
。slotA
和slotB
可能相等,这使得slotA != slotB
是一个假语句,它将从循环中退出。但是当你使用||
条件时,slotC != slotB
为真,并继续循环。
注意:这是一种可能,但可能不是真正的原因。
相关文章:
- 表达式中运算符的 GCC 和 ADL
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 为什么这个涉及重载运算符和隐式转换的C++表达式是不明确的
- 运算符表达式上下文中重载解析的内置运算符候选项的正确行为
- 这些重载运算符如何应用于表达式 d***b?
- 在 C 和 C++ 中,使用逗号运算符的表达式是否未定义"a = b, ++a;"?
- 运算符超载的Lambda表达式
- C++表达式中的运算符优先级
- 使用运算符>>折叠表达式
- 表达式必须具有类类型(运算符)
- C++表达式模板不明确的运算符重载
- 二元运算符"<<"不能应用于类型 "wostream" 和 "string" 的表达式
- 更改对象并将其在同一表达式中使用它是不确定的行为,但是子表达式由逗号运算符分开
- [ ] - 运算符中的加法和递增表达式
- 逗号运算符与圆括号表达式的用法示例
- 折叠表达式作为 [] 运算符的参数
- 关于解引用运算符是否在表达式中产生对象对值的定义不明确
- 混合运算符和表达式新建/删除
- 修复表达式;运算符优先级
- C++ 使用正则表达式搜索"正则表达式运算符"