Поскольку вы указали, что у вас возникают проблемы при написании логики для реализации этого, я бы попробовал этот подход: подумайте о том, что ваша программа должна делать в соответствии с заданием, и попробуйте написать шаги простым языком.
Например:
- Получить письмо от пользователя.
- Правильно ли написано письмо?
- Не так ли дело?
- напечатать какое-нибудь сообщение пользователю.
- Если мы дойдем до этого шага, мы знаем, что заглавные буквы такие же, но ответ неверный.Поэтому проверьте, не ниже ли это.
- Напечатайте что-нибудь для этого сценария, если оно есть.
- На данный момент оно не ниже, поэтому единственная оставшаяся возможность выше.
- Напечатайте что-нибудь для этого сценария.
- У нас есть еще догадки?
- Если мы вернемся к шагу 1.
- В противном случае перейдем к следующему шагу.
- Мы исчерпали все наши догадки и не сделалиправильно угадать.Так что верните 0.
После того, как вы выполнили все шаги и вам стало ясно, возьмите написанный псевдокод и вставьте его в свою функцию в качестве комментария.Попробуйте реализовать каждый из написанных вами шагов.
Если определенный шаг кажется сложным или сложным, запишите его как отдельную функцию и вызовите его.Например, вы можете написать Inputletter
для обработки шага 1. В нем вы можете проверить, что пользователь ввел что-то разумное, например письмо, и он будет продолжать запрашивать пользователя, если это не так.Когда эта функция возвращает вас знать , пользователь ввел букву, а не что-то поддельное, например число или символ.
Наконец, C предоставляет некоторые удобные функции, которые вы можете использовать:
Итак, ваш код:
while ((ch <= 'A' || ch >= 'z') || (ch > 'Z' && ch < 'a'));
if ((ch < 'A') || (ch > 'Z' && ch < 'a') || (ch > 'z'))
превращается в гораздо более читабельный:
while (!isalpha(ch));
if (!isalpha(ch))