关于while语句的一个问题

想知道while语句的具体运行方式
比如

#include<stdio.h>
int main(){
char a;
int n=0;
scanf("%c",&a);
while(a!='\n'){
if(a<='z'&&a>='a'){
a=a-32;
}
if(a=='A'||a=='E'||a=='I'||a=='O'||a=='U'){
n++;
}
printf("%c",a);
scanf("%c",&a);
}
printf("\n%d",n);
return 0;
}

为什么在输入字母后不会立即执行print,而是在输入\n后一起执行print
不会出现输入一个字母就立刻输出一个字母,而是在输入完所有字母后输出类似字符串的效果?

在键盘上输入后字母只是有缓存,只有enter键后才输入内存,这样”赋值“才算完成,scanf语句结束。
输入的时候可以输入字符串,但是enter键后只有最前面的字符被送进内存。