以下while循环有两个条件 cin>>用户;
while (( user != 'X') || ( user != 'O'))
{
cout << "Please enter either X or O " << endl;
cin >> user;
}
输入X或O后,它会不断要求输入新内容。我不明白为什么?但是,如果我删除条件,它可以正常工作。
答案 0 :(得分:4)
想想&#34;这个东西不是X的逻辑,或者这个东西不是Y&#34; - 禁止在X和Y之间重叠,这样的条件总是为真,即使是英文也是如此!
你已经被口语和微妙的不同所误导了#34;这件事既不是X也不是Y&#34;但你的代码不&#34;既不是X也不是Y&#34;,但&#34;不是X或不是Y&#34;。
你的意思是&#34;不是X而不是Y&#34;。
while (( user != 'X') && ( user != 'O'))
答案 1 :(得分:3)
使用&&
(和)代替||
(或)。
答案 2 :(得分:1)
你的情况总是如此......
while (( user != 'X') || ( user != 'O'))
如果user
为'X'
,则user
不是'O'
,即使条件的第一部分不满足,条件的第二部分也会满足。所以整个条件是true
。
如果user
为'O'
,则相同。
尝试使用“逻辑和”(a.k.a。&&
)而不是“逻辑或”。
答案 3 :(得分:0)
看起来你想要逻辑AND(&&
)而不是逻辑OR(||
)。
答案 4 :(得分:0)
如果您想更直观地理解发生的事情,请颠倒表达式的逻辑:
!=
变为==
,||
(或)变为&&
(和)。
所以你写的是:
如果用户等于'X'并且用户等于'O',则退出循环。
正如您所看到的,user
无法同时拥有这两个值。
你想要的是:
while (( user != 'X') && ( user != 'O'))
{
cout << "Please enter either X or O " << endl;
cin >> user;
}
答案 5 :(得分:0)
嗯,||
表示或。如果你自己大声朗读条件,听起来就像“虽然用户不是X或用户不是O.如果你考虑它,它将永远是真的 - 当它是X时,它也不是O,当它它是O,它不是X.你可能需要的是&&
:
while (( user != 'X') && ( user != 'O'))
这样,当用户既不是X也不是O时,循环将停止。
答案 6 :(得分:0)
那是因为你正在使用OR运算符。
你问的是用户是不是X还是用户不是一直要求输入。
将其更改为&amp;&amp;操作