getchar清理缓冲区

代码如下:

int tmp = 0;
while((tmp = getchar()) != '\n')
{
    ;
}

原理:将getchar()从缓存区读到的值赋值到tmp中,再与'\n'进行比较,直到getchar() 读到'\n'就退出循环。

为什么要清理缓冲区呢?

看看下面的例子就知道了。

getchar清理缓冲区_第1张图片

 上面的代码输入密码后就直接全打印出来了,那是因为没有清理缓冲区所导致的。其实键盘输入的数是直接放在一个缓存区当中,而scanf函数拿数是直接从缓存区拿的。我们输入ABCDEF后还得按下一个Enter键,按下Enter键之后缓存区就会存下'\n',而scanf函数将ABCDEF拿走后,缓存区还剩下'\n',所以getchar就把'\n'读取了,而'\n'不等于'Y',所以就直接执行下一步了。

如下图所示:

getchar清理缓冲区_第2张图片

 要想解决这个问题,就得清除缓存区了。下图又加上了清楚缓存区的代码,运行结果就正常了.

getchar清理缓冲区_第3张图片

 

你可能感兴趣的:(进阶C,java,缓存,开发语言)