whtmst
@whtmst
https://band.link/whtmst

C# код: Почему так, а не так?

Доброго времени суток друзья. Я совсем новичок в C#. Пишу консольное приложение и не могу понять почему работает так, а не так.
У меня есть переменная odd_or_even в которую пользователь должен что то ввести. После того как он это сделает, идет цикл с проверкой на то чтобы переменная odd_or_even равнялась либо слову odd, либо слову even, в противном случае будет следовать строка с ошибкой и просьба ввести одно из этих слов.
Вопрос такой: В моем понимании цикл должен проверить переменную odd_or_even на значение odd или even, то есть while (odd_or_even.ToLower() != "odd" || odd_or_even.ToLower() != "even"), но если я ставлю именно знак или || в таком случае он всегда считает это за ошибку, даже если я ввожу слова odd/even. А вот когда я поставил в условие знак и &&, как видно в коде, то все начало работать.
Возможно я еще чего то не понял, но мне кажется что я должен просить цикл проверить переменную на одно из двух значений, то есть или odd или even, а не сразу два значения.

Console.Write("Player 1 write Odd or Even: ");
string odd_or_even = Console.ReadLine();
while (odd_or_even.ToLower() != "odd" && odd_or_even.ToLower() != "even")
{
    Console.Write("ERROR: Player 1 PLEASE write Odd or Even: ");
    odd_or_even = Console.ReadLine();
}
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Почитайте про закон Де Моргана.
Вам нужно, чтоб odd_or_even была равна либо "odd", либо "even"
То есть:
odd_or_even == "odd" || odd_or_even == "even"
Но ошибку нужно писать только, если это не выполняется:
!(odd_or_even == "odd" || odd_or_even == "even")
Но это эквивалентно вот такому:
odd_or_even != "odd" && odd_or_even != "even"

Если подумать, то условие
odd_or_even != "odd" || odd_or_even != "even"
не выполнить невозможно, так как оно требует, чтобы odd_or_even одновременно не равнялось двум разным словам, что всегда выполняется
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Вы чего то не поняли.
Перевожу цикл на русский:
"спрашивать у пользователя до тех пор пока введенное не равно А или не равно Б". А введенное не может быть равно А и Б одновременно. Вы же пишете не условие ВЫХОДА из цикла, а условие ПРЕБЫВАНИЯ в нем. А || - или - вернет true если хотя бы один элемент true. И они оба не могут быть false ну физически никак.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы