Есть участок кода, в котором я ожидаю от пользователя подтверждения в виде 'Y'/'y' или 'N'/'n'. Перепробовал кучу вариантов, от getch до scanf() совместно с fflush(stdio) в разных циклах и их комбинациях. И всегда программа частично работает, но с подвохом. В частности: в нижеприведенной реализации я хоть и добился того, что проверка реагирует на 'Y'/'y' или 'N'/'n', но делать она это может, например, и при вот таком вводе: "polniyBred". (наткнулась на y в 6 позиции). Честное слово, я прекрасно понимаю, что проблема во мне, что я не совсем соображаю уже в 2 часа ночи, что я не знаю и 10% функций стандартной библиотеки. Поэтому прошу сжалиться и показать, как канонично пишутся такого рода проверки и пользовательские диалоги, избегая по возможности костылей и изоленты. Вы же все сталкивались с такими программами, которые не позволяют вам ввести чушь.
Кодvoid usrSettings(struct usrSettings_str **usrSet){
char consent;
printf("Before changing the settings, read the command manual .help\n");
printf("Are you sure? (Y/y(for 'Yes') or N/n(for 'No' - setting by default)\n");
scanf("%c", &consent);
while(consent != 'Y' && consent != 'y' && consent != 'N' && consent != 'n'){
printf("Enter Y/y or N/n\n");
printf("> ");
scanf("%c", &consent);
}
if (consent == ('Y' || 'y'));{
//Edit somethings settings
printf("User enter Yes\n");
}
if (consent == ('N' || 'n')){
//Return to main menu
printf("User enter NO\n");
}
}
В общих чертах, я понимаю, что решение должно быть банальным, но чем дольше я копаю, тем сильнее зарываюсь. Вот, например, scanf() отработала в цикле 4 раза (видать, брала символы из буферизированного ввода), до тех пор, пока не повстречала 'y'. (скриншот 3).
Скриншот 1 (Казалось бы...)
Скриншот 2 (Вот тут начинается)
Скриншот 3 (Полный абзац!)