清理缓冲区很重要

1 void clear_stdin(void) 2 
3 { 4 
5     stdin->_IO_read_ptr = stdin->_IO_read_end; 6 
7 }
该方法是将指针指向缓冲区末尾位置,这样就达到了清空的效果。

在C语言中,咱们经常须要去清空缓存区,对于缓存区清空的重要性,接下来咱们进行具体的说明。
首先咱们先解释一下缓存区。缓存

1.缓存区

C语言中的缓冲区又称为缓存,它是内存空间的一部分。
  也就是说,在内存空间中预留了必定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫作缓冲区。
    C语缓冲区分为三种类型:一、全缓冲 二、行缓冲 三、不带缓冲。
  缓冲区根据其对应的是输入设备仍是输出设备,分为输入缓冲区和输出缓冲区。spa

例如,在咱们平时要在磁盘中读取信息的状况下,先会把数据放到缓存区中,读取完后,再次从磁盘中读取信息。
缓存区,他的意义就是在高速CPU与低速的设备之间的一个区域,这个区域让CPU工做效率更高。指针

1) 全缓冲
当填满标准I/O缓存后才进行实际I/O操做。全缓冲的典型表明是对磁盘文件的读写。code

2) 行缓冲
当在输入和输出中遇到换行符时,执行真正的I/O操做。这时,咱们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操做。典型表明是标准输入(stdin)和标准输出(stdout)。blog

3) 不带缓冲
也就是不进行缓冲,标准出错状况stderr是典型表明,这使得出错信息能够直接尽快地显示出来。内存

大部分系统默认使用下列类型的缓存:
标准出错是不带缓存的。
若是是涉及终端设备的流,则它们是行缓存的,不然是全缓存的。class

咱们常常用到的输入输出流,在目前的ANSI C 中缓存的特征是:stdin和stdout是行缓存;而stderr是无缓存的。 效率

了解了这些,接下来咱们进入正题,接下来咱们要清楚为何要清空缓存区,
这是由于在你有的时候在输入一个字符后,在输入一个字符,若是你不清空缓冲区,那上一个字符还在你的缓冲区内!这样就形成错误了!终端

相关文章
相关标签/搜索