第四期2006年12月益阳职业技术学院学报

JournalofYiyangVocationalandTechnicalCollegeNO.4Dec.2006

C语言程序中清除键盘缓冲区的方法

杨长虹

(益阳职业技术学院

[摘

湖南益阳413000)

要]在进行数据输入时,有时会发生因键盘缓冲区中有键值而导致输入数据有误,本文介绍在C语言

程序中清除缓冲区中键值的方法。

[关键词]键盘缓冲区[中图分类号]TP316

C语言清除

[文献标识码]A

一、直接清除法

当你在进行数据输入前,如能确认键盘缓冲区中只有一个多余的键值时,可以利用下面程序中的getch()函数,将其读走。本程序在使用scanf()函数接受键盘输入数据之前,先用一个getch()函数将其多余的那个键值“清除”。

while(kbhit()=O)/{*按任意键跳出循环水*/}getch();/*读出多余的一个键值/*printf(“\nPleaseinputyourname:”);scanf(“%s”,&name);

二、采用循环读值法

功能为消除所有打开文件所对应的缓冲区,同时包

括键盘缓冲区。

四、调用DOS中断方法

使用函数intdos()调用OxOc(12)号中断来清除缓冲区,这种方法比上几种方法都要节省资源。

clrkey(void)

{unionREGSregs;regs.h.ah=OxOc;intdos(&regs,&regs);

五、采用远程指针直接控制

当你进行数据输入前,如果不能确认有几个多

余的键被按下时,可以使用循环来读取键值,直到把所有键值读完为止,这种方法比较实在而且很有效。下面用一个函数来实现这个功能。在函数中,实际是多次使用getch()将缓冲区内的数据读出,使用while()循环,利用bioskey()来检测键盘缓冲区中是否有键值,作为循环条件。如果键盘缓冲区中有键值(即while()条件为真)时则用get()来“清除”,否则退出循环。

clkey(viod)

{while(bioskey(1))getch();}三、使用清除文件缓冲区函数fflush()

该函数的原形为fflush(FILE*stream),其作用为清除stream指向的文件缓冲区内容,在stdio.h头文件中有说明,指明其参数为标准设备文件———stdin(即键盘),即fflush(stdin)。另外还有一个类似的函数:flushball(),它不带参数,

键盘缓冲区在内存中实际上是一个先进先出

的循环队列,它使用两个指针BUFFER1和BUFFER2指向队列中的数据,其中BUFFER1指向数据的开始,BUFFER2指向数据的结尾。当*BUFFER1=*BUFFER2时,即当两个指针所指的数据地址相同时,表明队列中没有数据,即键盘缓冲区为空。在内存中BUGGER1指针值存放于0040:001a处,即十进制的1050处,BUFFER2存放于0040:001c处,即十进制的1052处。我们可以先定义这两个远程指针,然后让它们相等即可。

charfar*pl_kb=(charfar*)1050;charfaI*p2一kb=(charfar*)1052;if(*Pl_kb!=p2_kb)(*pl_kb=*p2_kb;}

以上五种方法各有千秋,有的程序简单容易实现,有的可节省资源,适用于不同的环境,作为程序员可以按需所用。

(责任编辑:冯晖)

[收稿日期]2006-11-15

[作者简介]杨长虹,男,益阳职业技术学院计算机应用工程系副主任。

-50-

c语言清除键盘缓冲区函数,C语言程序中清除键盘缓冲区的方法相关推荐

  1. R语言使用na.omit函数删除向量数据中的缺失值(NA值)

    R语言使用na.omit函数删除向量数据中的缺失值(NA值) 目录 R语言使用na.omit函数删除向量数据中的缺失值(NA值) R 语言特点 R语言使用na.omit函数删除向量数据中的缺失值(NA ...

  2. c语言数组去重的函数,C语言之函数 - osc_wpg0dgym的个人空间 - OSCHINA - 中文开源技术交流社区...

    函数 对于初学C语言的人来说可能会问函数是什么?在这里我有一个通俗的解释:函数就是一个盒子,在这个盒子里面可以封装你想实现的功能,之后通过主函数进行调用即可 为什么要使用函数? 对于一个层序来说,模块 ...

  3. 应用c语言编写adams用户自定义函数的研究,C语言编写adams用户自定义函数导入到adams中function_builder.doc...

    C语言编写adams用户自定义函数导入到adams中function_builder 应用C语言编写adams用户自定义函数导入到adams中function builder 的整个过程 当前使用软件 ...

  4. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数、均值和中位数、使用funs函数指定函数列表

    R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数.均值和中位数.使用funs函数指定函数列表 目录

  5. R语言dplyr包summarise_all函数计算dataframe数据中指定因子变量的水平的个数(levels)以及缺失值的个数(missing values)

    R语言dplyr包summarise_all函数计算dataframe数据中指定因子变量的水平的个数(levels)以及缺失值的个数(missing values) 目录

  6. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数、均值和中位数、使用list函数指定函数列表并指定自定义函数名称

    R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的计数个数.均值和中位数.使用list函数指定函数列表并指定自定义函数名称 目录

  7. R语言dplyr包summarise_all函数计算dataframe数据中所有数值数据列的均值和中位数、使用sapply筛选数值数据列(Summarize all Numeric Variables

    R语言dplyr包summarise_all函数计算dataframe数据中所有数值数据列的均值和中位数.使用sapply筛选数值数据列(Summarize all Numeric Variables ...

  8. R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的方差

    R语言dplyr包summarise_at函数计算dataframe数据中多个数据列(通过向量指定)的方差 目录 R语言dplyr包summarise_at函数

  9. R语言dplyr包summarise_if函数计算dataframe数据中所有数值数据列的均值和中位数、基于条件进行数据汇总分析(Summarize all Numeric Variables)

    R语言dplyr包summarise_if函数计算dataframe数据中所有数值数据列的均值和中位数.基于条件进行数据汇总分析(Summarize all Numeric Variables) 目录

最新文章

  1. 只适合小模型小训练集的交叉验证
  2. spring boot中@ResponseBody等注解的作用与区别
  3. 利用python实现ORM
  4. 获取ClassLoader的途径
  5. 硬件基础:理解串口通信以及232,485,422常见问题
  6. LeetCode 996. 正方形数组的数目(回溯+剪枝)
  7. maven netty 配置_Netty是业界最流行的NIO框架之一:初识Netty
  8. Charles 映射本地文件map local
  9. ucGUI/emWin 自定义中文字库(汉字字库)
  10. 超分辨 :SRCNN
  11. Zetero+zotfile+坚果云配置
  12. 抽象类和具体类的区别
  13. matlab画根轨迹的渐近线,根轨迹的渐近线.ppt
  14. 地方麻将、棋牌手游的APP推广只差这项技术
  15. 微信公众号爬虫的基本原理
  16. 【需求响应】基于数据驱动的需求响应优化及预测研究(Matlab代码实现)
  17. 搭建第一个Dapp应用(3)——Solidity防伪溯源存证签证合约——2021.5.3
  18. 【节点电压法】一道例题示例
  19. 2021-2025年中国光纤压力传感器行业市场供需与战略研究报告
  20. plsql登录进去的时候,有个弹窗,但是我勾选了,下次不再显示,但是我又想让他弹出了,怎么恢复?

热门文章

  1. Linux内核参数值vga的意义,关于传递给Linux内核的vga参数的值的意义
  2. 小程序分享功能实现结果回调以及页面传参
  3. DXF转DWG怎么转?三招轻松实现DXF格式转换成DWG
  4. 了解一下中央处理器(CPU)
  5. 2016年大数据核心产业规模达168亿
  6. 微信公众号如何上传长图
  7. 成长性因子选股(1)
  8. linux使用mac触控板,Y470 三点触摸板在linux和mac下的实现
  9. FPGA配置芯片EPCS读写操作--STM32读写
  10. win7,运行某些程序,提示错位模块名称:KERNELBASE.dll 且曾用AIO runtime一键安装了运行库 解决办法