получить символ в C, не нажимая «Enter» - PullRequest
2 голосов
/ 22 февраля 2011

Возможно ли это? Использование обычного scanf или getchar не будет работать, потому что Я должен нажать «ввод» после ввода символа.

Ответы [ 5 ]

5 голосов
/ 22 февраля 2011

Вы приближаетесь к домену ncurses .

3 голосов
/ 22 февраля 2011

Входной поток в Си буферизован.

Буфер - это место, где данные временно хранятся до тех пор, пока они не будут готовы к обработке.

Буфер очищается (очищается), когда происходит одно из трех:

  • Буфер заполнен.
  • Данные должны быть напечатаны в стандарте выход.
  • Буфер сбрасывается явно. (Что делает нажатие клавиши ввода).

Вам понадобится использовать средства, не включенные в стандартную библиотеку, чтобы иметь эту функцию.

1 голос
/ 22 февраля 2011

Это невозможно при использовании чистого стандарта C. Вам придется использовать системную библиотеку, такую ​​как conio.h или Windows API и т. Д.

1 голос
/ 22 февраля 2011

Функциональность потоковой передачи мешает.Может быть опция fcntl для отключения буферизации.Или вам может повезти, используя более низкий уровень read колл.

0 голосов
/ 22 февраля 2011

Возможно getch() в conio.h - это то, что вам нужно, но учтите, что это нестандартно.

...