我需要在两个条件下实现while循环
I need to implement a while loop with two conditions
下面的while循环有两个条件cin>>用户;
while (( user != 'X') || ( user != 'O'))
{
cout << "Please enter either X or O " << endl;
cin >> user;
}
在我输入X或O之后,它一直要求输入新的输入。我不明白为什么?但如果我去掉所有条件,它就能正常工作。
想想"这个东西不是X,或者这个东西不是Y"的逻辑——除非X和Y重叠,这样的条件总是true,即使在英语中也是如此!
你被口语化的、微妙的不同"这东西既不是X也不是Y"误导了,但你的代码是而不是"既不是X又不是Y",而是"不是X或不是Y"。
你的意思是"不是X也不是Y"。
while (( user != 'X') && ( user != 'O'))
使用&&
(和)而不是||
(或)。
您的条件始终为true。。。
while (( user != 'X') || ( user != 'O'))
如果user
是'X'
,则user
不是'O'
,因此,即使不满足条件的第一部分,也满足条件的第二部分。因此整个条件是true
。
如果user
是'O'
也是一样的。
尝试使用"逻辑和"(也称为&&
)而不是"逻辑或"。
看起来您想要的是逻辑AND(&&
)而不是逻辑OR(||
)。
如果您想更直观地了解发生了什么,请反转表达式的逻辑:
!=
变成==
并且||
(或)变成&&
(和)。
所以你写的是:
如果用户等于"X"且用户等于"O",则退出循环。
正如您所看到的,user
不可能同时具有两个值。
你想要的是:
while (( user != 'X') && ( user != 'O'))
{
cout << "Please enter either X or O " << endl;
cin >> user;
}
嗯,||
的意思是或。如果你大声朗读这个条件,听起来就像"当用户不是X或用户不是O时。如果你仔细想想,它总是正确的——当它是X时,它也不是O,当它是O时,它不是X。你可能需要的是&&
:
while (( user != 'X') && ( user != 'O'))
这样,当用户既不是X也不是O时,循环将停止。
这是因为您使用了OR运算符。
您正在询问用户是否不是X或用户是否不是O,请继续请求输入。
将其更改为&;操作员
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何在for循环中包含两个索引值的测试条件
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 提升::enable_if有两个条件
- 唤醒多个线程以在每个条件下工作一次
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 最佳无分支有条件选择两个SSE2填充双打
- 如何在没有 c++ 中的数组/算法的情况下对两个条件的字符串进行排序
- 现代C++编译器是否能够避免在某些条件下两次调用常量函数
- 上两个六角形将视觉转换和分开2个字节六角形,上两个角色,下两个十六进制在C 中转到第二个Charater
- 同一类下两个对象之间的比较
- if条件下两个字符串比较的优化代码
- 我需要在两个条件下实现while循环
- 矢量迭代器在条件下擦除两个元素
- 为什么不能在 if 条件下比较两个字符串?
- C++在两个不同的条件下执行/while循环
- if语句在有两个OR选项的第三个条件下不起作用
- 当同时按下两个键时进行检测