Вы не говорите, что которую вы используете, но поскольку у вас уже есть какой-то answe rs, который может работать или не работать для Windows, я отвечу на POSIX-системы.
В POSIX ввод с клавиатуры происходит через нечто, называемое терминальным интерфейсом, который по умолчанию буферизует линии ввода до тех пор, пока не будет нажата кнопка Return/Enter, чтобы правильно работать с backspace. Вы можете изменить это с вызовом tcsetattr:
#include <termios.h>
struct termios info;
tcgetattr(0, &info); /* get current terminal attirbutes; 0 is the file descriptor for stdin */
info.c_lflag &= ~ICANON; /* disable canonical mode */
info.c_cc[VMIN] = 1; /* wait until at least one keystroke available */
info.c_cc[VTIME] = 0; /* no timeout */
tcsetattr(0, TCSANOW, &info); /* set immediately */
Теперь, когда вы читаете из стандартного ввода (с getchar()
, или любым другим способом), он будет возвращать символы немедленно, не дожидаясь возвращения/Enter. Кроме того, backspace больше не будет работать, вместо того, чтобы стирать последний символ, вы будете читать фактический символ обратного пробела на входе.
Кроме того, вы захотите восстановить канонический режим до выхода вашей программы, или неканоническая обработка может вызвать нечетные эффекты с вашей оболочкой или тем, кто вызывается вашей программой.
какая платформа? окна? линукс? макинтош? – qwertz
В другом (более позднем) комментарии компилятор заявлен как VS2012, что означает Windows. –