Почему getchar не останавливается, чтобы получить ввод? - PullRequest
1 голос
/ 17 апреля 2020

У меня есть следующий фрагмент кода, который должен взаимодействовать с пользователем относительно того, что он хочет сделать.

int input;
printf("Would you like to update the name of the student?\n");
printf("Enter Y(yes) or N(no)\n");
input = getchar();

if (input == 'Y' || input == 'y') {
  printf("Please enter the updated name\n");
  scanf("%s", tmpSt->name);
}

printf("Would you like to update the student's ID?\n");
printf("Enter Y(yes) or N(no)\n");
input = getchar();

Но при выполнении он не останавливается, чтобы получить первый ввод.

Would you like to update the name of the student?
Enter Y(yes) or N(no)
Would you like to update the student's ID?
Enter Y(yes) or N(no)

Предполагается получить ответ для имени, но он идет прямо к идентификатору.

1 Ответ

4 голосов
/ 17 апреля 2020

scanf("%s", ...) оставляет новую строку, введенную пользователем, в ожидании во входном потоке.

Вместо getchar() используйте char c; scanf(" %c", &c); В качестве начального пробела scanf() будет игнорировать ожидающие пробелы, включая ожидающие символ новой строки.

Также проверьте возвращаемое значение scanf(), чтобы обнаружить неверный ввод и конец файла.

...