最近做acm时候,老是在输入输出的问题上卡时间,真是很蛋疼啊,故总结了下,关于清空的问题。
举个例子:
#include
int main()
{
int i;
char aString[3];
printf(“Please enter some characters:”); /*先向键盘缓冲区里输入无用字符*/
getchar();
rewind(stdin); /*清空键盘缓冲区里的无用字符*/
printf(“Please enter ‘OK’: “); /*输入字符串“OK”*/
for(i=0;i {
aString[i]=getchar();
}
aString[i]=’ ’;
puts(aString); /*输出字符串aString*/
return(0);
}
Microsof Visual C++下调试结果:
输入:abcdefghijk回车OK回车
输出:OK
之前缓冲区里的abcdefghijk垃圾字符都被清空了。
下面向新手解释一下rewind(stdin);的工作原理。
C语言把键盘,显示器等设备当做文件来处理,也就是说从键盘输入相当于从一个文件中读入,向显示器输出相当于向一个文件写出。
而stdin是C标准库定义的标准文件之一,它与键盘相关联。我一般把它理解为指向键盘这个“文件”的指针。
而rewind()函数的作用是把文件的当前位置指针指向文件头。
两者结合,rewind(stdin);的作用也就是把“指向键盘(一个文件)的指针从当前位置挪到键盘(一个文件)开头”,相当于抛弃了当前键盘缓冲区中的数据,重新开始输入。
虽然并不是真正的把缓冲区里的数据全部清掉,但却起到了清空键盘缓冲区的作用。
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113156 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!