C语言中缓冲区

什么是缓冲区?

在C语言中,缓冲区(Buffer)是一种用于临时存储数据的内存区域。它通常用于在数据的产生和消耗之间进行中间存储和传输。它是在堆上开辟的一块空间。

作用

减少系统调用的次数,提高效率

例如:当从键盘或其他输入设备读取数据时,数据通常会首先被存储在输入缓冲区中,然后程序可以从缓冲区中逐个字符或一次一行地读取数据,这样就无需读一个字符调进行一次系统调用。

输出缓冲区种类
  1. 行缓冲
    程序当读取字符遇到 '\n' 时,将会刷新缓冲区,将读取的内容输出。
    当程序结束时,将会刷新缓冲区,将读取的内容输出。
    同样,我们可以代码手动的进行刷新缓冲区 fflush(stdout) ,来达到我们需要的效果
    需要注意的是,缓冲区也存在大小,当缓冲区被塞满后,缓冲区将自动刷新,将其中的内容输出
  2. 全缓冲
    这种类型输出缓冲区只有当缓冲区被塞满后才会将其中的内容输出
输入缓冲区

从终端读取数据,读到换行符'\n' 为止,空格和回车,将会一起被缓冲区丢弃,直到遇到下一个非空字符为止

缓冲区带来的问题
char a;
char b;
scanf("%c",&a);
scanf("%c",&b);

在以上示例中,我们将去等待终端的输入字符,而当我们输入第一个字符,并且按下回车后,变量a将会被赋值为所输入字符,但此时会发现,跳过了b的赋值阶段,b会被赋值为 '\n' ,这是因为scanf通过回车来将判断输入是否结束,scanf会将回车之前的内容读取,并且将 '\n' 留在了缓冲区中,而在下一次scanf读取时遇到了'\n' 将该字符赋值给了变量b。

要避免此情况需要在赋值变量a后,将缓冲区清空。

清空缓冲区

getchar函数,会从缓冲区中读取一个字符,因此常用其来清空缓冲区

//清空缓冲区
char temp;
while((temp = getchar())!='\n' || temp != EOF);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值