c语言缓冲问题

         最近做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进行处理,非常感谢!

上一篇 2012年2月4日
下一篇 2012年2月5日

相关推荐