比方说我用来scanf从键盘上读取一个字符.之后,我printf用来打印我刚读过的角色.
scanf("%c",&ch);
printf("%c",ch);
Run Code Online (Sandbox Code Playgroud)
在scanf阅读角色的时候,我必须按回车继续并运行printf,对吧?
让我们说我ABCD用键盘进入.之后printf将打印A.
但是当我这样做时:
do {
scanf("%c",&ch);
printf("%c",ch);
} while (ch!='\n');
Run Code Online (Sandbox Code Playgroud)
并输入ABCD键盘,我认为printf必须打印A.因为A不是\n它会继续循环,对吗?
但不会这样,它会打印出来ABCD.为什么会这样?
键入时"ABCD\n",每个都从输入缓冲区中scanf("%c",&ch);读取一个char,直到到达换行符.
因此,在'A'打印之后,"BCD\n"缓冲区中仍然存在一个,以便下一次scanf立即成功读取另一个char,'B'在循环的下一次迭代中.