fgets ожидает '\ n' перед тем, как получить ввод в буфер [дубликат]
Я пытаюсь использовать fgets из stdin, и он начинает сбор данных с экрана только после того, как я набираю '\ n'. пока символ '\ n' не застрянет.
примечание: у меня в коде нет scanf
соответствующая часть кода:
while (reconnect_flag)
{
printf("%s\n", RECONNECT_MENU);
char Input[2] = "";
fgets(Input, 2, stdin);
}
Ответы
Поскольку fgets()он предназначен для чтения строки данных, включая первую новую строку (или EOF), он ведет себя так, как задумано.
Кроме того, если вы не сделаете что-то необычное с настройками терминала, терминал не будет отправлять содержимое строки данных программам, читающим с терминала, пока не будет достигнута новая строка. См. Канонический и неканонический ввод терминала для получения дополнительной информации с точки зрения POSIX (Unix). Таким образом, попытка прочитать один символ через fgets(Input, 2, stdin)
не получит никакого ввода, пока не будет введена новая строка.
Вы должны работать с API-интерфейсами, зависящими от платформы, если вы хотите вводить данные, как только они становятся доступными. Это означает, что то, что вы делаете в Windows, будет отличаться от того, что вы делаете в системах на основе POSIX - различных разновидностях Unix, включая Linux. Даже в системах на основе POSIX вы можете использовать curses
библиотеку или системные вызовы более низкого уровня, и есть несколько способов сделать это.