Я пытаюсь использовать fgets для получения пользовательского ввода из командной строки. Фрагмент кода является частью функции, которая позволяет пользователям добавлять новые узлы в односвязный список. Как вы можете видеть из моего кода, я использую цикл while для запроса запроса от пользователя (чтобы он мог добавить несколько узлов). Когда я запускаю программу, все в порядке в первый раз. Однако, когда я пытаюсь добавить второй узел, программа пропускает запрос ввода для поля первого имени. В моей командной строке, я получаю имя: Фамилия:C: fgets пропускает ввод пользователя
while (go)
{
char first_name[256];
char last_name[256];
char telephone[256];
char address[256];
printf("First name: ");
fflush(stdout);
fgets(first_name, sizeof(first_name), stdin);
//scanf("%s", &first_name);
fflush(stdin);
printf("Last name: ");
fflush(stdout);
fgets(last_name, sizeof(last_name), stdin);
fflush(stdin);
//scanf("%s", &last_name);
printf("Address: ");
fflush(stdout);
fgets(address, sizeof(address), stdin);
fflush(stdin);
//scanf("%s", &address);
printf("Telephone: ");
fflush(stdout);
fgets(telephone, sizeof(telephone), stdin);
fflush(stdin);
//scanf("%s", &telephone);
if (!search_by_all(first_name, last_name, address, telephone))
{
add_entry(first_name, last_name, address, telephone);
printf("Success adding entry! Add another entry? 1 for yes, 0 for no.\n");
scanf("%d", &go);
fflush(stdin);
fflush(stdout);
}
else
{
printf("Error adding entry. Quitting...\n");
break;
}
}
Я смотрел на подобные вопросы на StackOverflow и других сайтах, но промывка и стандартный ввод стандартный вывод не сделать трюк для меня. Также не выделяет больше места в моих буферах. Какие-либо предложения? Благодаря!
Почему 'fflush (stdin)'? Разве это не неопределенное поведение, по крайней мере, на большинстве платформ? –
не использовать 'fflush (stdin);' если вы не используете компилятор Microsoft –
возможный дубликат [Почему fgets не вводит первое значение?] (Http://stackoverflow.com/questions/20092468/why-fgets- is-not-ввод-first-value) – Barmar