Чтобы переключить стандартный ввод в буфер не до тех пор, пока не нажмете ввод, вы можете возиться с настройками ввода-вывода терминала, например ..
struct termios oldopts;
struct termios newopts;
tcgetattr(fileno(stdin), &oldopts);
newopts = oldopts;
newopts.c_lflag &= (~ICANON & ~ECHO);
tcsetattr(fileno(stdin), TCSANOW, &newopts);
Структура termios и прототипы tcgetattr () и tcsetattr () находятся в файле termios.h.
Затем вы можете использовать select (), чтобы проверить, готов ли символ для чтения.