C语言中如何清空输入输出缓冲区最简单的是用fflush()函数 。
此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件 。
函数原型:int
fflush(FILE
*stream)
;
函数功能:清除一个流 , 即清除文件缓冲区.
常用场合:
一、ff(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区 , 把输出缓冲区里的东西打印到标准输出设备上 。
二、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据 , 并按回车后结
束) 。
①
遇空格、“回车”、“跳格”键 。
②
遇宽度结束 。
③
遇非法输入 。
键盘缓冲区就可能有残余信息问题 。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)
三、写文件的时候
不会马上进行物理磁盘的文件读写,而是先写入缓存,当缓存中内容达到一定程度后再写
FILE
*fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
如何清除c输入流在标准C中只定义了输出流、更新流c语言的清除输入流函数的刷新c语言的清除输入流函数,而输入流的刷新是未定义的 。
当然c语言的清除输入流函数 , 在vc下面的fflush(stdin)是微软自己扩展的 , 而GCC下面是没有的 。
c语言:
while( (c=getchar())!='\n'c != EOF)
;
c:
cin.clear();//这里如果用cin.clear(istream::failbit); 是不行的
cin.ignore(numeric_limitsstreamsize::max(),'\n');
c语言中数据输入错误了如何提示输入错误并实现要求重新输入可以使用清理输入流fflush(stdin);这个原因是因为错误输入的内容会保留在输入流c语言的清除输入流函数,下一次判断会从输入流开始读?。?因为错误输入的内容还在 , 所以直接判断错误 , 继续循环 。
但有些编译器并不支持清理输入流 。所以c语言的清除输入流函数我们这时需要用手动输入让其清除 。使用getchar();让其接收错误的字符 。但这样就会变成这样,如果输入多个错误就会出现多个次数的循环;直至没有错误输入;这样如果循环内容多,所消耗的资源也就多了 。
所以可以使用while()来执行里面的消除字符,但如果直接这样while(getchar())就会进入无限循环,所以可以让其接收一个终止条件,每次输入完都会按回车,那就让其接收'\n'换行符终止自己的循环 。
【c语言的清除输入流函数 c语言清除已输入的内容】扩展资料
C语言从键盘输入数据
程序是人机交互的媒介,有输出必然也有输入 。在C语言中,有多个函数可以从键盘获得用户输入:
scanf():和 printf() 类似,scanf() 可以输入多种类型的数据 。
getchar()、getche()、getch():这三个函数都用于输入单个字符 。
gets():获取一行数据,并作为字符串处理 。
scanf() 是最灵活、最复杂、最常用的输入函数 , 但它不能完全取代其c语言的清除输入流函数他函数,大家都要有所了解 。scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入 。
gets() 会读取用户输入的整行内容 , 包括空格 。而 scanf() 遇到空格就结束读取,也就是说,使用 scanf() 读取的字符串中永远不会包含空格 。
C语言中流是什么意思?C语言c语言的清除输入流函数的I/O系统为用户提供c语言的清除输入流函数了一个接口c语言的清除输入流函数,该接口与实际的存取设备无关 。只是设备的一个抽象表示形式 。这个抽象的接口称为流 , 实际的设备称为文件 。
C文件系统可以与各种设备一起使用,如打印机、硬盘、终端等,缓冲文件系统可以将每个设备转换成逻辑设备,即所谓的流 。所有的流工作方式类似,所以很容易操作不同的设备 。流有2种类型:文本流和二进制流 。
文本流是一系列字符 , 可以由多行构成,每行由一个换行符终止 。
二进制流是一系列字节 , 并与外部设备上的字节一一对应 。
C语言fflush(stdin)函数是什么意思,在什么情况下用它1、fflush(stdin)是清空输入缓冲区的意思 。stdin就是标准输入 std即standard(标准)c语言的清除输入流函数 , in即input(输入)c语言的清除输入流函数,合起来就是标准输入 。一般就是指键盘输入到缓冲区里的东西 。
2、在清除文件缓冲区时使用c语言的清除输入流函数,文件以写方式打开时将缓冲区内容写入文件 。
例c语言的清除输入流函数:
#include conio.h
#include io.h
#include stdio.h
#include string.h
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without closing it */
flush(stream);
printf("\nFile was flushed, Press any key to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
扩展资料
使用fflush的注意事项
1、MSDN 文档里也清楚地写着:fflush on input stream is an extension to the C standard (fflush 操作输入流是对C标准的扩充) 。以下是 C99 对 fflush 函数的定义:int fflush(FILE *stream);
2、如果stream指向输出流或者更新流(update stream)c语言的清除输入流函数,并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout) 。
3、fflush函数的行为是不确定的 。fflush(NULL)清空所有输出流和上面提到的更新流 。如果发生写错误,flush函数会给那些流打上错误标记,并且返回EOF , 否则返回0 。
4、如果 stream 指向输入流(如 stdin) , 那么 fflush 函数的行为是不确定的 。故而使用 fflush(stdin) 是不正确的 。
参考资料来源:百度百科—fflush(stdin)
C语言中流指什么 , 不要复制,用自己的理解解释一下 , 感谢了版本四
流 原从stream翻译来 。
什么电脑外设控制,磁盘文件输入输出 , 只要是输入或者输出所产生的数据都是流 。
从linux对于硬件设备的控制很容易看出,对于硬件和磁盘上的文件,C语言的操作方法基本上一样 。linux中C语言也是把硬件当做文件进行操作 。(本质上,它把外设与txt文本文件看成一类东西 。)流的概念的提出 , 我认为是为c语言的清除输入流函数了程序对于文本和硬件的一系列操作而设定的统一标准 。从程序员角度来看 , 就不需要知道各个操作的细节,编程的时候,统一把外设都当成文件进行操作就OK了 。比如对于声卡,先OPEN打开 , 然后write写入,就完成喇叭发声 , 然后close关闭 。和对于文本操作基本一样 。
不管对设备或是文件(广义上都是文件)的输入输出操作,而产生的数据,都是I/O流 。而C语言中的I/O流能分为两种:文本流,二进制流 。很容易看出文本流控制很二进制流控制的区别 。你用TC,fopen打开一个MP3或者别的32位文件,然后读?。岱⑾钟梦谋玖鞔蚩螅?文件只能读到开头一点点 。因为32位音乐文件有很多的'00'数据 , 文本流会把它当做文件结束符而结束读取 。而二进制流打开方式则可以从头读到尾 。(这时候输出的时候可能存在点问题,实验的时候可以用二进制 流方式再写入到另外一个文件来观察 。)
流是由输入输出产生的,是用于数据交换或转换的统一的标准(特指这一类的数据) 。C和一些编程语言中定义的流(stream)类,就是对这类数据的定义 。并通过成员函数对“流”进行操作 。这样,用户和程序,程序和外设之间都是通过“流”进行交互 。而程序员不需要知道“流”的底层到底是怎么实现的 。就好像吃饭和排泄 。数据流中定义了,先牙齿咀嚼,然后胃部消化,然后小肠吸收,然后大肠发酵 , 然后你懂的 。你只需要CIN,还有COUT,就能控制吃喝拉撒 。你管它是细嚼还是狼吞c语言的清除输入流函数?你管它便秘还是拉肚子?吞吐量是电脑性能的事 。你管它是先进小肠还是先进胃?底层是内核的事 。你只需要拥有了CIN和COUT,你就拥有了一切 。
从广义上来说 , 流也是文件,不同于txt文本类的文件(流属于数据 , 数据等同于文件) 。你可以对流进行各种操作 。缓冲区的定义,也是为了对流的操作 。
综上,我们知道了,流是数据,流是标准,流是文件 。流的作用我们知道了 , 那么“流”到底是个什么玩意呢?非常同意 448634095 所说的 。用着用着自己就知道是什么玩意了 。就好像刚开始学编程 闹不明白函数 是个啥意思,和数学上的函数一点也不一样 。你现在知道整形是什么了吧?你能不能给我举个简单的列子给我解释下整形是什么?
注意:流和 输入输出的缓冲区是两个概念 。
关于c语言的清除输入流函数和c语言清除已输入的内容的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 游戏与益智,游戏益智类
- sqlserver大数据统计查询,sql 查询大量数据
- nba虚拟集群物理主机,nba虚拟比赛直播
- java网站开发源码,java 网站项目开发
- c语言初始化数组的函数 c语言数组初始化的三种方式
- java画心代码,用java画一个爱心
- 电商如何推销杯子,推销杯子的简短推销词
- 包含Python打高斯函数的词条
- 红米路由器怎么改频宽模式,红米路由器怎么设置网速最快