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.一点废话
以上内容全是,经过看书,搜索信息,自己写的,或许有些错误,望指正!