赞
踩
如上图所示,当我们输入密码的字符串按下回车后,我们发现还没来得及输入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读入,就不会影响我们下面的错做了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。