Вам нужно критически подумать обо всех утверждениях, с которыми вы сталкиваетесь, включая это. Когда кто-то говорит, что тип char
- это плохо , ваш естественный вопрос должен звучать так:
почему?
Тот, кто делает такое заявление, должен
- убедительно
- тестируемый
- подробный
объяснение этого вопроса. Я не читал ссылку, поэтому не знаю точного обоснования, но если вы найдете его убедительным, отредактируйте свой вопрос, добавьте обоснование и дайте мне знать об этом.
Теперь, если вы убеждены что char
действительно плохо , тогда ваш следующий вопрос должен быть
в каком случае это символ плохой?
Вполне может быть, что есть некое условное правило, и, если данное условие истинно, тогда это действительно так. Когда вы автоматически задаете себе скептические вопросы, которые защищают вас от веры в ошибочные высказывания, вы начинаете становиться более зрелым программистом.
Ваши критерии
if (ch == 'P' && ch2 == 'M' || ch == 'p' && ch2 == 'p'){ […] }
не игнорируются. Это просто ложь в том случае, если вы упомянули. Задайте себе правильные вопросы еще раз:
Что я хочу добиться этого кода? Могу ли я перевести приведенное выше условие в обычный вопрос на английском языке?
Что ж, ответ должен быть либо сильным «нет», либо слабым «да». Сильное «нет», если вы этого не понимаете. Слабое «да», если вы понимаете или думаете, что понимаете это сейчас. Попробуем сформулировать утверждение простыми словами:
Если ch - это «P», а ch2 - это «M» или ch - это «p», а ch2 - «p».
Обратите внимание, что без или это утверждение всегда будет ложным, поскольку противоречащие значения проверяются по ch2. Итак, давайте посмотрим, что приоритет оператора здесь. Глядя здесь: https://en.cppreference.com/w/c/language/operator_precedence
вы видите, что логическое И имеет приоритет 11, а логическое ИЛИ имеет приоритет 12. Давайте сделаем это явным, чтобы избежать необходимости думать о приоритетах операторов :
if ((ch == 'P' && ch2 == 'M') || (ch == 'p' && ch2 == 'p')){ […] }
Как мы можем сформулировать это в виде простых слов:
ch - «P» и ch2 - «M», или оба они - «p».
Итак, вам нужно проверить, каковы фактические значения ваших переменных. В случае с char это работает, если я не ошибаюсь. В противном случае вам необходимо проверить, что представляют собой значения, и сравнить их с соответствующим представлением типа данных символов. Это нелогично, если вы не выработаете четкое представление.