scanf和printf的缓冲区

    首先介绍两个先验知识:

函数fflush:

功能:清除读写缓冲区

头文件:stdio.h

原型:int fflush(FILE *stream);

例: fflush(stdin)---->把输入缓冲区里的东西丢弃,并不一定会成功,gcc就不可以,vc貌似可以;fflush(stdout)把输出缓冲区里的东西打印到标准输出设备上


标准I/O缓冲区:

标准i/O提供缓存的目的是尽可能减少使用read和write调用的次数。标准I/O提供类三种类型的缓冲

  1. 全缓冲。这种情况下,在填满标准I/O缓冲区后才进行实际的I/O操作。对于驻留在磁盘上的文件通常是由标准I/O库实现全缓冲的。在一个流上执行第一次I/O操作时,相关的标准I/O函数通常调用malloc获取需要使用的缓冲区。
  2. 行缓冲。在这种情况下,当输入输出中遇到换行符时,标准I/O库执行I/O操作。当流涉及终端时,通常使用行缓冲。因为标准I/O库用来收集每一行的缓冲区长度是固定的,所以只要填满类缓冲区,那么即使还没有写一个换行符,也进行I/O操作
  3. 不带缓冲。标准I/O库不对字符进行行缓冲存储。标准出错流stderr通常是不带缓冲的,这就使得出错信息可以尽快的显示出来。

ISO C 要求下列缓冲特征:

  • 当且仅当标准输入和标准输出不涉及交互设备时,它们才是全缓冲的
  • 标准出错绝不会是全缓冲的

下文中:<-表示按enter键

scanf&

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值