Проблема здесь не в scanf, а в вызове printf.
Printf буферизирует вывод, пока не будет достигнута новая строка, поэтому программа ничего не отобразит, пока вы не printf("\n");
. (Что также происходит, когда кто-то нажимает клавишу ввода, вы выводите их возврат на экран, что приводит к сбросу буфера.)
Если вы не хотите разбивать вывод с помощью printf("\n")
, то вы можете использовать fflush(stdout)
, чтобы вручную очистить буфер, не печатая ничего, например:
int a;
while(a!='q')
{
scanf("%c",&a);
printf("%c",a);
fflush(stdout);
}