C语言清空缓冲区

C语言中的缓冲区

参阅参考网址详尽
1.缓存区
C语言中的缓冲区又称为缓存,它是内存空间的一部分。
  也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
 C语言中缓冲区分为三种类型:1、全缓冲 2、行缓冲 3、不带缓冲。
 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

例如,在我们平时要在磁盘中读取信息的情况下,先会把数据放到缓存区中,读取完后,再次从磁盘中读取信息。
缓存区,他的意义就是在高速CPU与低速的设备之间的一个区域,这个区域让CPU工作效率更高。类似于计算机中的CACHE

  1. 全缓冲
    当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

  2. 行缓冲
    当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是标准输入(stdin)和标准输出(stdout)。

  3. 不带缓冲
    也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

大部分系统默认使用下列类型的缓存:
标准出错是不带缓存的。
如果是涉及终端设备的流,则它们是行缓存的,否则是全缓存的。

我们经常用到的输入输出流,在目前的ANSI C 中缓存的特征是:stdin和stdout是行缓存;而stderr是无缓存的。

了解了这些,接下来我们进入正题,接下来我们要清楚为什么要清空缓存区,
这是因为在你有的时候在输入一个字符后,在输入一个字符,如果你不清空缓冲区,那上一个字符还在你的缓冲区内!这样就造成错误了!
(应当尽量避免使用fflush函数,可能与c标准不符合)
简单粗暴利用fflush()函数
fflush(stdin) :清理输入缓冲区
fflush(stdout) :清理输出缓冲区
简单粗暴利用fflush()函数
函数原型:int fflush(FILE *stream) ;
函数功能:清除一个流,即清除文件缓冲区.

输出缓冲区:
输出缓冲区
在这里插入图片描述
如上图,函数阻塞无法打印结果在这里插入图片描述
清空输出缓冲区的方法:
1、在printf()函数中加一个\n(表示要打印的第一句结束)他就不会等待其他输入直接输入
2、利用fflush()函数
在这里插入图片描述
3、函数运行结束会输出执行输出
因为缓冲区会等到下一次输出的命令直到函数运行结束
4、函数遇到输入的命令会输出
在这里插入图片描述
5、缓冲区满了也会输出
原理:缓冲区不会一直从输入中输出内容,而是等待一个输出的终止。比如先打印一行再等待其他的输出。

清空输入缓冲区
清空输入缓冲区主要原理是:
输入的短暂中止 如何判断下一次的输入在哪里

标准输入函数:
参阅博客
C语言中有很多输入函数,每一种输入的函数对输入的内容都会进行不一样的输入判断
常用的输入函数有scanf(),get()等函数
都是把数据输到输入缓存器中,遇到结束标记把数据给所定义的变量。

scanf遇到回车或空格结束,并且回车与空格保存在缓存器中。
getchar遇到回车与空格结束,并且回车与空格保存在缓存器中。
gets遇到回车结束,在字符输入完成后加\0,缓存器中\n清除。
fgets遇到回车结束,在字符输入完成后加\n和\0.当然这是在长度足够的情况下,不够就加字符串结束标记\0.,缓存器中\n已经为提出。

使用while((ch = getchar()) != ‘\n’ && ch != EOF);语句
这种方法是最好的方法,可以称为万能清空缓存区御语句。
EOF代表文件结尾(end of file)
简单粗暴
setbuf()函数关闭缓存区
setbuf(stdin) 关闭输入缓冲区
setbuf(stdout) 关闭输出缓冲区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值