我需要在两个条件下实现while循环

I need to implement a while loop with two conditions

本文关键字:条件下 两个 实现 while 循环      更新时间:2023-10-16

下面的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,请继续请求输入。

将其更改为&amp;操作员