下载此文档

清空缓冲区.doc


文档分类:IT计算机 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
清空缓冲区下面来看看几种流行的缓冲区清空方法:fflush(stdin);式由C99标准文档中:Ifstreampointstoanoutputstreamoranupdatestreaminwhichthemostrecentoperationwasnotinput,thefflushfunctioncausesanyunwrittendataforthatstreamtobedeliveredtothehostenvironmenttobewrittentothefile;otherwise,。但由MSDN上的fflush定义:Ifthefileassociatedwithstreamisopenforoutput,,(stdin)在VC上还是有效地~鉴于各编译器对fflush的未定义行为实现不一样,不推荐使用fflush(stdin)刷新输入缓冲区。setbuf(stdin,NULL);式由前面对setbuf函数的介绍,可以得知,setbuf(stdin,NULL);是使stdin输入流由默认缓冲区转为无缓冲区。都没有缓冲区了,当然缓冲区数据残留问题会解决。但这并不是我们想要的。scanf("%*[^\n]");式这里用到了scanf格式化符中的“*”,即赋值屏蔽;“%[^集合]”,匹配不在集合中的任意字符序列。这也带来个问题,缓冲区中的换行符’\n’会留下来,需要额外操作来单独丢弃换行符。(《C语言程序设计现代方法第二版》中提到)经典式intc;while((c=getchar())!='\n'&&c!=EOF);由代码知,不停地使用getchar()获取缓冲区中字符,直到获取的字符c是换行符’\n’或者是文件结尾符EOF为止。这个方法可以完美清除输入缓冲区,并且具备可移植性。清空键盘缓冲区很多种方法,如用fflush(stdin);rewind(stdin);等,但是在linux这些都不起作用,还得我今天试了半天都没成功,上网搜了一下发现setbuf(stdin,NULL);就能直接清空键盘缓冲区了。以下几个实例:Sampleone#include<>intmain(){charch1;charch2;?ch1=getchar();ch2=getchar();printf("%d?%d",ch1,ch2);return0;}程序的本意很简单,就是从键盘读入两个字符,然后打印出这两个字符的ASCII码值。可是执行程序后会发现出了问题:当从键盘输入一个字符后,就打印出了结果,根本就没有输入第二个字符程序就结束了。例如用户输入字符’a',打印结果是97,10。这是为什么呢,【分析】:scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(n)而结束的,这个n会一起读入输入流缓冲区的,所以第一次接受输入时取

清空缓冲区 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人iris028
  • 文件大小16 KB
  • 时间2019-12-25
最近更新