2013-12-04 1 views
0

Следующий цикл while имеет два условия: cin >> user;Мне нужно реализовать цикл while с двумя условиями

while ((user != 'X') || (user != 'O')) 
{ 
    cout << "Please enter either X or O " << endl; 
    cin >> user; 
} 

После ввода X или O он продолжает запрашивать новый ввод. Я не понимаю, почему? Но если я удалю из условий, он работает правильно.

ответ

3

Используйте && (и) вместо || (или).

1

Ваше состояние всегда верно ...

while ((user != 'X') || (user != 'O')) 

Если user является 'X' то user не 'O', таким образом, даже если первая часть условия не выполняются, то вторая часть условия выполняется , Таким образом, все условие - true.

То же самое, если user является 'O'.

Попробуйте это с помощью «логического и» (a.k.a. &&) вместо «логического» или «логического».

0

Похоже, вы хотите логический И (&&) вместо логического ИЛИ (||).

0

Если вы хотите, чтобы понять, что происходит интуитивно, обратную логику вашего выражения:

!= становится == и || (или) становится && (и).

Так что вы написали:

Выход из цикла, если пользователь равен «X» и пользователь равен «O».

Как вы можете видеть, для user невозможно оба значения одновременно.

Что вы хотите:

while ((user != 'X') && (user != 'O')) 
{ 
    cout << "Please enter either X or O " << endl; 
    cin >> user; 
} 
0

Ну, || средства или. Если вы прочитаете условие вслух для себя, это будет звучать так: «Пока пользователь не является X, или пользователь не является O. Если вы думаете об этом, это всегда будет верно - когда это X, это также не O, а когда это O, не X. то, что вы, вероятно, нужно &&:

while ((user != 'X') && (user != 'O')) 

Таким образом, цикл останавливается, когда пользователь не является ни X, ни О.

+0

Благодарим вас за разъяснение, сейчас оно делает чувства. – user3059925

0

это потому, что вы используете OR Оператор.

Вы спрашиваете, не является ли пользователь X или нет пользователя, не просите ввода.

изменить его & & оператора

4

Подумайте о логике «этой вещи не X, или эта вещь не Y» - за исключением перекрытий между X и Y, такое условие всегда правда, даже на английском!

Вы были введены в заблуждение разговорным и тонким образом «эта вещь не является ни X, ни Y», но ваш код не «ни X, ни Y», но «не X или нет Y».

То, что вы имели в виду, было «не X, а не Y».

while ((user != 'X') && (user != 'O')) 
Смежные вопросы