代码如下:
int tmp = 0;
while((tmp = getchar()) != '\n')
{
;
}
原理:将getchar()从缓存区读到的值赋值到tmp中,再与'\n'进行比较,直到getchar() 读到'\n'就退出循环。
为什么要清理缓冲区呢?
看看下面的例子就知道了。
上面的代码输入密码后就直接全打印出来了,那是因为没有清理缓冲区所导致的。其实键盘输入的数是直接放在一个缓存区当中,而scanf函数拿数是直接从缓存区拿的。我们输入ABCDEF后还得按下一个Enter键,按下Enter键之后缓存区就会存下'\n',而scanf函数将ABCDEF拿走后,缓存区还剩下'\n',所以getchar就把'\n'读取了,而'\n'不等于'Y',所以就直接执行下一步了。
如下图所示:
要想解决这个问题,就得清除缓存区了。下图又加上了清楚缓存区的代码,运行结果就正常了.