C语言:fflush()的用法以及缓冲区的概念
int fflush()函数
fflush()函数的原型如下:
int fflush()(file * fp)
主要用到这俩个部分:
fflush(stdio):清空输入缓冲区
fflush(stdout):清空输出缓冲区
我们输入输出的内容都会先放到输入输出缓冲区中,那么先认识一下缓冲区。
1、什么是缓冲区?
缓冲区就是我们常说的缓存,属于内存的一部分。它依据对应的输入设备和输出设备把内存的一部分空间分为输入缓冲区和输出缓冲区
2、为什么会有缓冲区?
一句话:减少对磁盘的读写次数,提高计算机的运行效率。系统调用时需要时间的,程序中频繁的使用系统调用会降低程序的运行效率 ,库函数访问文件的时候根据需要,设置不同类型的缓冲区,从而减少了直接调用IO系统调用的次数,也就提高了效率
3.缓冲区的分类
全缓冲、行缓冲、不带缓冲
(1).全缓冲 :填满I/O缓存后进行实际的I/O操作 eg:磁盘的读写(2).行缓冲 :输入输出遇到换行符时执行真正的I/O操作 eg:键盘的输入(3).不带缓冲 :直接进行显示,相当于直接刷新数据。 eg:stderr错误信息快速输出到标准错误文件中
fflush(stdin)的使用过程分析
int main()
{char a,b;printf("请输入俩个字符:\n");scanf("%c",&a);//fflush(stdin);//假设不使用fflushscanf("%c",&b);printf("第一个字符:%c\n第二个字符:%c",a,b);
}
这很惊讶,但是仔细想想好像也正常。毕竟换行符也是一个字符。程序把换行符也当成了一个字符赋给了变量b.可是这并非我们本意,怎么解决呢?这个时候fflush(stdin),就大显神威。接下来说一下详细过程,把1写进缓冲区,\n也写进缓冲区,然后scanf()挑选走了1,缓冲区留下了\n,使用fflush(stdin),又清除了\n,此时再次输入2和\n,scanf()挑选走了2.所以也就打印出了1和2.
fflush(stdout)的使用过程和分析如下
int main()
{int a[5]={1,2,3,4,5};for(int i=0;i<5;i++){printf("第%d个数是:%d\n",i+1,a[i]);fflush(stdout);
}
这好像挺正常,确实最终的结果是一样的,不一样的是内部的逻辑。
作用:调用printf()时,输出的结果一般会被标准库缓存起来,可能不会及时打印写出到输出设备上面,此时就可以用fflush(stdout)强制把缓存内容进行`输出。
不加fflush(stdout):调用了printf后,把1,2,3,4,5值都放到了输出缓冲区里,最后一次性进行了显示。
加了fflush(stdout):调用了printf后,把1,2,3,4,5值每次放一个就输出一个,相当于着5个值从输出缓冲区一个一个蹦出来的。只是人眼看起来打印一样。
C语言:fflush()的用法以及缓冲区的概念相关推荐
- vs2019C语言fflush,vs2019清空输入缓冲区
Angular2学习之开发环境构建 一.主要资料 http://blog.csdn.net/cz_jjq/article/details/50425206 http://www.tuicool.com ...
- c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...
清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...
- c语言中fflushstdin作用,C语言fflush(stdin)函数是什么意思,在什么情况下用它
C语言fflush(stdin)函数是什么意思,在什么情况下用它 來源:互聯網 2009-04-22 18:49:31 評論 分類: 電腦/網絡 >> 程序設計 >> 其他 ...
- fclose在c语言中的作用,c语言fcloseall函数用法实例介绍
c语言fcloseall函数用法实例介绍.fcloseall函数的返回值,函数 fcloseall() 将所有打开的流与其底层的文件或功能集合关闭.任何缓冲的数据都将首先被写入,使用 fflush(3 ...
- linux c语言 select函数用法
原文地址:点击打开链接 linux c语言 select函数用法 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 co ...
- c语言怎么清空标准输入缓冲区,C语言中如何清空输入输出缓冲区
C语言中如何清空输入输出缓冲区 答案:5 信息版本:手机版 解决时间 2019-10-06 09:40 已解决 2019-10-05 13:54 C语言中如何清空输入输出缓冲区 最佳答案 2019- ...
- c语言while end用法,c语言eof的用法
计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取.资料源通常称为档案或串流.在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of fil ...
- c语言中各种函数的作用,C语言常用函数用法大全
C语言是当中广泛的计算机编程语言,是所有计算机编程语言的祖先,其他计算机编程语言包括当前流行的Java语言,都是用C语言实现的,C语言是编程效率高的计算机语言,既能完成上层应用开发,也能完成底层硬件驱 ...
- Go语言MD5加密用法实例
Go语言MD5加密用法实例 本文实例讲述了Go语言MD5加密用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import ( "crypto/md5" ...
- C语言atoi()函数用法
C语言atoi()函数用法 头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * s ...
最新文章
- LINUX下用C语言历遍目录 C语言列出目录
- iOS 之 UICollectionView
- html dom对象简写,js参考手册-html dom对象
- java 从mysql 导出到excel_JAVA实现在数据库导出到EXCEL并下载
- 图片测量尺寸软件_3D扫描之工件测量检测
- 小米某员工向供应商索要大额好处费 已被公安拘捕
- swiper vue 初始化方法_详解swiper在vue中的应用(以3.0为例)
- 企业直播活动策划方案怎么做
- matlab遗传算法程序报错
- [译] Vue 最黑暗的一天
- 计算机校本培训 培训总结,校本培训工作总结(2015—2016学年度)
- 如何下载最新的NDVI数据?需要翻墙,安装MRT,如何处理下载的NDVI数据?
- 魔兽争霸 php文件,[War3]Fdf文件详解,简单的UI教程演示-by CarlosX
- matlab计算连续复利,求连续复利计算公式。。。
- 教你如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题,使用激活 密钥
- 武汉大学计算机学院附近澡堂,武汉大学附近美食攻略
- linux fping命令使用
- KPI、KPA、OKR三者的区别
- 笔记③:牛客校招冲刺集训营---C++工程师(5.9 C++新特性)
- BZOJ[3620]似乎在梦中见过的样子 KMP
热门文章
- 期末复习【操作系统】
- 震惊~~飞流android版使用体验!!
- 网秦上市前夕被央视曝光恶意吸费 网秦飞流否认
- 书舟计划丨国鸿公益amp;MINI书箱漂流乡村公益行 为爱启程
- Win11系统一些功能修改并不令人满意,盘点不尽人意之处
- java fly bird小游戏_Flappy Bird 小游戏
- win7系统备份还原软件_傲梅轻松备份bug导致系统还原0x81000203错误,
- Android BitmapShader实现圆形和圆角图片
- JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
- DWT文件怎么转换成html,dwg和dwt文件有什么区别?DWT又可以转换什么格式?-迅捷CAD转换器...