输入缓冲区
一,什么是输入缓冲区
如上图所示,当我们输入密码的字符串按下回车后,我们发现还没来得及输入yes or no 就已经显示输入失败,这是怎么回事儿呢?
这就要引出我们今天介绍的主角————输入缓冲区
输入缓冲区:这是一个我们键盘输入与编译器读取之间的一个缓冲区域,编译器并不是直接读取我们在键盘上输入的信息,而是从输入缓冲区中读取信息。
下面我们用图示在分析上述图片的问题所在。
下面展示一些 内联代码片
。
int main()
{
char arr[20] = { 0 };
int ch = 0;
printf("请输入密码:");
scanf("%s", arr);
printf("请确认(Y/N):");
ch = getchar();
if (ch == 'Y')
{
printf("输入成功");
}
else
{
printf("输入失败");
}
return 0;
}
scanf语句遇到回车后停止读入,此时我们输入缓冲区中还有**\n**遇到下面的getchar语句后就会被直接读取,所以导致我们还没有输入Y或者N就显示读取失败。
二,如何处理
我么可以采取下面的方式进行处理。
下面展示一些 内联代码片
。
// int main()
{
char arr[20] = { 0 };
int ch = 0;
int tmp = 0;
printf("请输入密码:");
scanf("%s", arr);
while ((tmp = getchar()) != '\n')//将输入缓冲区内剩余的信息读入到tmp中,防止影响下面的ch读入;
{
;
}
printf("请确认(Y/N):");
ch = getchar();
if (ch == 'Y')
{
printf("输入成功");
}
else
{
printf("输入失败");
}
return 0;
}
这样的话我们输入缓存区中剩余的\n被tmp读入,就不会影响我们下面的错做了。