scanf是怎么从缓冲区读取数据的?

本文详细解析了scanf如何从缓冲区读取数据。标准输入stdin使用行缓冲,数据先存于临时缓冲区,回车或缓冲区满后才执行IO操作。scanf和getchar等函数从中读取数据,缓冲区为空时会挂起等待数据。格式化字符串指导scanf读取数据,空白字符匹配任意数量的空白,非空白字符匹配输入,格式说明符如%d、%s指定数据格式。解析失败的数据不会从缓冲区清除,影响后续读取。
摘要由CSDN通过智能技术生成

标准库I/O提供了三种缓冲类型:全缓冲,行缓冲,无缓冲

标准IO缓冲类型 何处使用
全缓冲 当划出的被填满或者数据读取至末尾时,执行IO操作 磁盘文件的读写
行缓冲 当输入输出过程遇到换行符“\n” 或者分配的缓冲区已满,则执行IO操作 涉及终端的读写操作如sdin/stout
无缓冲 当有数据产生时,立刻由相应设备进行处理 一般stderr使用无缓冲,不代表系统不缓存

标准输入缓冲区stdin使用行缓冲的方式存储输入(接收写入设备的数据存到缓冲区中),用户存入的数据先存在临时缓冲区中,当用户键入回车或者分配的缓冲区满了之后,再执行IO操作,将数据由临时缓冲区拷贝到stdin中,比如说C语言中提供的scanf和getchar等函数就是从上述的缓冲区中读取数据

缓冲区就好像一个有大小的队列,从外界设备键入数据,将这个数据按顺序放入这个队列,然后使用getchar等函数将这个数据依次读取,(注意:因为getchar函数是读取一个字符,所以如果用户一次键入了很多数据,后面再调用getchar函数就会从缓冲区中直接读取,不需要再等待用户键入数据,直到缓冲区中的数据读取完毕)

scanf与getchar等函数会在stdin中读取数据,如果缓冲区中存在数据则直接从缓冲区中读取数据
,如果上述缓冲区为空,则将上述函数挂起,等待数据缓冲完成(键入回车或

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值