Новая строка остается в буфере после fgets ()? - PullRequest
1 голос
/ 06 декабря 2010

Вот фрагмент кода, который вызывает у меня проблемы:

#define MAX_NAME_LEN 64

char choice;
char name[MAX_NAME_LEN];
printf("Name: ");
fgets(name, MAX_NAME_LEN, stdin);
choice = getchar();

После того, как я ввожу имя и нажимаю ввод, getchar () также захватывает символ новой строки вместо ожидания следующего символа. Как я могу исправить свой код (без чего-либо хакерского, например, другого getchar (), если это возможно), чтобы getchar () ожидал символ, как и ожидалось, после ввода имени?

1 Ответ

0 голосов
/ 06 декабря 2010

Я не могу воспроизвести вашу проблему с помощью GCC в системе Mac OS X. Возможно, вы используете систему Windows, в которой нажатие ENTER может привести к CR и LF?

В любом случае, обратите внимание, что getchar() обычно не возвращается сразу после нажатия одной клавиши, потому что по умолчанию в большинстве систем stdin имеет линейную буферизацию , то есть подсистема терминала не будет доставлять любые символы пользовательского процесса, пока не будет нажата ENTER.

getchar() не заменяет старые функции DOS <conio.h>, такие как getch().

Обойти это зависит от того, на каком O / S вы находитесь.

...