清空键盘缓冲区的一种好方法!
用 rewind(stdin); 语句可以达到很好的清空键盘缓冲区的作用。不用考虑太多其他因素。这是我在一本名为《软件开发:编程与设计(C语言版)》中所了解到的,作者是USA的David Conger。以前也了解到其他的清空键盘缓冲区的方法,如:用getchar();fflush(stdin);等。但感觉很麻烦,不好用,也不容易理解。而rewind(stdin)简单好用,而且是一种可移植的方法。
举个例子:
#include <stdio.h>
int main()
{
int i;
char aString[3];
printf("Please enter some characters:"); /*先向键盘缓冲区里输入无用字符*/
getchar();
rewind(stdin); /*清空键盘缓冲区里的无用字符*/
printf("Please enter 'OK': "); /*输入字符串“OK”*/
for(i=0;i<2;i++) /*字符串aString接受字符串“OK”*/
{
aString[i]=getchar();
}
aString[i]='\0';
puts(aString); /*输出字符串aString*/
return(0);
}
Microsof Visual C++下调试结果:
输入:abcdefghijk回车OK回车
输出:OK
之前缓冲区里的abcdefghijk垃圾字符都被清空了。
下面向新手解释一下rewind(stdin);的工作原理。
C语言把键盘,显示器等设备当做文件来处理,也就是说从键盘输入相当于从一个文件中读入,向显示器输出相当于向一个文件写出。
而stdin是C标准库定义的标准文件之一,它与键盘相关联。我一般把它理解为指向键盘这个“文件”的指针。
而rewind()函数的作用是把文件的当前位置指针指向文件头。
两者结合,rewind(stdin);的作用也就是把“指向键盘(一个文件)的指针从当前位置挪到键盘(一个文件)开头”,相当于抛弃了当前键盘缓冲区中的数据,重新开始输入。
虽然并不是真正的把缓冲区里的数据全部清掉,但却起到了清空键盘缓冲区的作用。