| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8549 人关注过本帖, 3 人收藏
标题:清空键盘缓冲区的一种好方法!
只看楼主 加入收藏
EEPROM
Rank: 1
来 自:江西
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-8-27
收藏(3)
 问题点数:0 回复次数:5 
清空键盘缓冲区的一种好方法!
  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);的作用也就是把“指向键盘(一个文件)的指针从当前位置挪到键盘(一个文件)开头”,相当于抛弃了当前键盘缓冲区中的数据,重新开始输入。
虽然并不是真正的把缓冲区里的数据全部清掉,但却起到了清空键盘缓冲区的作用。
搜索更多相关主题的帖子: 缓冲区 键盘 
2008-12-09 13:58
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:0 
学习了

作鲲鹏,遨游于天地沧海
2008-12-09 17:06
OneMan
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-12-5
收藏
得分:0 
恩 学习了 感谢!
2008-12-09 17:25
BLG0507
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-3-6
收藏
得分:0 
今天刚用过fflush(stdin),不过你这方法也是可以的,效果一样
2011-03-08 21:09
快速回复:清空键盘缓冲区的一种好方法!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047062 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved