void usrSettings(struct usrSettings_str **usrSet){
int c; // Очистка буфера stdin пока не нашел варианта умнее. А проблема в том, что
do { //в буфере остается какой-то хлам, который я не увижу и не уловлю, пока не научусь
c = getchar(); //пользоваться отладчиком
} while (c != '\n' && c != EOF);
char *str;
str = (char *) calloc(BUFLEN, 1);
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/using last changes)\n");
bzero(str, BUFLEN);
printf("settings > ");
for(;;)
{
fgets(str, BUFLEN, stdin);
if (*(str + 2) != '\0') //Вот тут дичайший костыль. Сделано для проверки "не введено ли несколько
//символов", потому что до этого момента при вводе "yo, common" давало true.
//и работает только со смещенеим 2. Было бы не плохо порассуждать, почему так?
{
printf("No, only one symbol!\n");
printf("settings > ");
bzero(str, BUFLEN);
continue;
}
*(str + 1) = '\0';
if ((*str == 'Y') || (*str == 'y'))
{
printf("User set Yes\n");
break;
}
if ((*str == 'N') || (*str == 'n'))
{
//Exit to parent function
break;
}
else
{
printf("Stop! You must enter 'Y'/'y' for \"Yes\" or 'N'/'n' for \"No\"\n");
printf("settings > ");
bzero(str, BUFLEN);
}
}
free(str);
}
char userGetLine[256]; // строка для чтения
char confirm; // итоговое целое число
printf("%s", msg); // выводим приглашение ко вводу
fgets(userGetLine, sizeof(userGetLine), stdin); // считываем строку
// пока не будет считано целое число
while ((sscanf(userGetLine, "%c", &confirm) != 'Y') || (sscanf(userGetLine, "%c", &confirm) != 'y') || (sscanf(userGetLine, "%c", &confirm) != 'N') || (sscanf(userGetLine, "%c", &confirm) != 'n') ) {
printf("Incorrect input. Try again: "); // выводим сообщение об ошибке
fgets(userGetLine, sizeof(userGetLine), stdin); // и заново считываем строку
}
// Делаю что-то дальше со своими настройками.
Упражнение 1.14. Напишите программу, печатающую гистограммы частот встречаемости вводимых символов.