C语言缓存区(缓冲区)详解

缓存的概念

缓存就是把硬盘里面的内容放在一个特定的内存区域中的过程就是缓存。

为什么有缓存这个概念

对于电脑到用户每次想要访问某个内容的时候,电脑就要从硬盘里面调出对应的文件,这个过程如果访问次数很多的话就十分的消耗时间,因为每次多访问了电脑的内部硬件,对于电脑和用户都有不好的体验。同时也占用了cpu的一个任务。所以就设置了一块区域专门来放需要经常调用的文件的内存,叫做缓存区。相对于访问硬盘区来说,访问缓存区的速度会十分的快。

缓存和下载的区别

缓存和下载不同,有很多的新手都会搞混淆,缓存一般是指将应用需要频繁调用的文件暂时放在缓存区中,以带来更快的响应速度。而下载是指将文件下载硬盘中。他两个文件保留的时间也不一样,缓存的文件一般在程序关闭时也会一起删除,而下载会一直保存在硬盘中除非用户主动删除,否则就会一直保留。

C语言中缓存区的类别

1.行缓存模式

填满缓冲区或者有换行符'\n'或者调用fflush函数强制刷新缓冲区会立即输出

2.全缓存模式

填满缓冲区或者调用fflush函数强制刷新缓冲区会立即输出

3.无缓存模式

写入什么数据就会立即输出什么数据

新手可能遇到的一个问题

对于新手来说在第一次写char类型的变量时可能会遇到

​
​
#include<stdio.h>
int main()
{
	char a, b, c;
	scanf("%c%c", &a, &b);
	scanf("%c", &c);
	printf("%c %c %c", a, b,c);
	return 0;
}

​

​

 

当输入x(空格)y时输入就直接结束了,不让我们给c赋值而是进行了输出,输出的却是  “x(空格)(空格)(空格)y”,这显然不是我们想要的,所以这是为什么呢?

原因在于在我们输入数据的时候数据不是直接赋给了变量a和b而是存储在了输入流中的缓存区中,当输入结束后,变量才会从缓存区中去找对应的值,这样因为我们 输入了x(空格)y,这里面就有三个字符(空格也算一个字符)所以a就会从缓存区中从头开始找第一个找到x就将x赋值给a,以此类推,因为到了c缓存区中还有数据所以就不会在行进输入了,所以第二个scanf函数就直接跳过了。

解决方法

自己定义函数

void clear_input_buffer() //清空缓存区防止误按,增强代码的健壮性
{
	int c;
	while ((c = getchar()) != '\n' && c != EOF);
}

将这个函数调用在第一个scanf函数的后面就可以实现对第二个scanf函数的手动输入。

原理是用getchar()函数不断的从缓存区中吸收剩下的字符直到吸收到'\n'或者是遇到EOF(这是一个文段到了末尾的标志)

库函数

fflush()在stdio头文件的函数。用来刷新不同的缓存区的。用fflush(stdin)就可以刷新输入流的缓存区来进行清空。stdin表示的是标准输入流。将这个函数调用在第一个scanf函数的后面就可以实现对第二个scanf函数的手动输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值