输入输出时关于缓冲区的一点问题

1.缓冲区

1.什么是缓冲区

缓冲区(buffered)是一块内存,把输入的字符临时存储在这块内存里,然后等待操作。

2.为什么需要缓冲区

首先在若干字符作为一个块传输比逐个发送字符耗费的时间少。其次如果你输入有误。就可以使用您的键盘更改功能来修正错误。并且最终按下回车,就可以发送正确的输入。——C primer plus

3.缓冲区的类型

缓冲区的类型有两种
1.完全缓冲
对于完全缓冲,只有当缓冲区满时才会被清空
2.行缓冲
对于行缓冲,遇到一个换行符时将被清空缓冲区(内容被放送至目的地),但是换行符保留在缓冲区中。(这时会出现一些问题)

2.各种函数

1.getchar()

getchar的作用是从stdin流中读取一个字符,所以当缓冲区中有字符时,它将直接读取数据而不需要键盘手动输入。getchar()需要输入回车结束,但是前提是缓冲区中无数据,如果缓冲区中遗留换行符,换行符将被接收,从而导致getchar()直接结束。getchar()用于接收字符时,终止值为第一个接收的字符。为char类型。

2.scanf

函数 scanf() 是从标准输入流(stdin)stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。所以scanf在读取时,有可能也会因为缓冲区的多余数据,导致输入错误,跳过输入等问题。主要时scanf(“%d”,,);,因为scanf在此下接收任意一个字符,其性质跟getchar()相仿。所以导致出错。而在其他格式下,scanf会跳过缓冲区的空格,换行符,制表符等等,不回出现上述错误情况。

3.出错与解决方案

正是由于函数从缓冲区取值,而缓冲区内部可能遗留换行符等等数据,导致输入提前结束。我们可以用getchar()将缓冲区的字符读取并且弃掉。达到清空缓冲区的目的。防止缓冲区的数据对我们键盘输入造成干扰。除此之外,我从其他博客中发现还有利用scanf清除缓冲区数据。大家可以去搜一下,有点玄学。

4.一点废话

以上内容全是,经过看书,搜索信息,自己写的,或许有些错误,望指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值