Это невозможно в простом C, и часто вообще невозможно. Причина заключается в буферизации, входные потоки ждут символа (обычно ввод), чтобы отправить данные процессорам (например, scanf, gets, getchar, ...). Прежде всего, сам STDIN буферизуется. Вы можете отключить это, используя setvbuf : setvbuf ( stdin, NULL, _IONBF, 0)
, который я однако не рекомендую. Это также означает, что вам придется самостоятельно обрабатывать возвраты и другие управляющие символы, безобразный материал (используйте telnet в течение некоторого времени, если хотите знать, насколько это болезненно).
Во-вторых, терминал, в котором вы работаете, часто будет также использовать буферы, даже если вы отмените буферизацию в C, этот будет буферизоваться до тех пор, пока не будет нажата клавиша enter. Вы также можете попытаться найти специфичные для системы способы отключения буферизации, но, насколько я знаю, они существуют не для каждой системы / терминала.
Если вы хотите управлять выводом на этом уровне, понадобятся системные API или даже создание пользовательских консолей.