Это распространенный вопрос логической логики. ||
означает «или», что означает «пока одна сторона этого истинна, тогда выражение истинно». Поэтому, когда вы передаете верхний регистр 'N'
в c != 'n' || c != 'N'
, программа говорит: «Хорошо, 'N'
не равно 'n'
, поэтому одна сторона выражения является истинной, поэтому все выражение истинно и в этом нет необходимости. проверить остальное выражение. " Даже когда вы нажимаете строчную 'n'
, программа говорит: «Хорошо, 'n'
равно 'n'
, но не равно 'N'
, поэтому одна сторона выражения является истинной, поэтому все выражение является истинным. " Это то, что происходит в вашем цикле while.
С другой стороны, &&
означает «и», что означает «обе стороны выражения должны быть истинными»; когда вы передаете 'N'
в верхний регистр c != 'n' && c != 'N'
, программа думает, что "'N'
не равно 'n'
, но равно 'N'
, поэтому истинной является только одна сторона выражения, поэтому выражение ложь ".
Это сбивает с толку, потому что если бы вы тестировали, чтобы увидеть, были ли введенные символы равны определенным значениям, вы бы использовали ||
(например, "Я хочу знать, если 'a'
или 'b'
или 'c'
введено ").
Как правило, когда вы используете ||
для определенного выражения и хотите получить противоположное этому выражению, вам нужно изменить на &&
(например, я не хочу ничего из 'a'
, 'b'
или 'c'
; или, иначе говоря, значение не может быть 'a'
и , оно не может быть 'b'
, и , оно не может быть 'c'
"). Аналогично, если вы бы использовали &&
для определенного выражения, и вы хотите использовать противоположное этому выражению, тогда вам нужно будет использовать ||
. Это один из законов Де Моргана, который я бы рекомендовал вам прочитать, чтобы вы могли избежать необходимости заново откройте каждого из них самостоятельно.