zoukankan      html  css  js  c++  java
  • 清理缓冲区很重要

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

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

    1.缓存区

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

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

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

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

    3) 不带缓冲
    也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

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

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

    了解了这些,接下来我们进入正题,接下来我们要清楚为什么要清空缓存区,
    这是因为在你有的时候在输入一个字符后,在输入一个字符,如果你不清空缓冲区,那上一个字符还在你的缓冲区内!这样就造成错误了!

  • 相关阅读:
    MySQL 使用 ON UPDATE CURRENT_TIMESTAMP 自动更新 timestamp (转)
    MySQL数据类型:UNSIGNED注意事项(转)
    MySQL慢查询参数
    elasticsearch中mapping的_source和store的笔记(转)
    python 使用 elasticsearch 常用方法(聚合)
    python 使用 elasticsearch 常用方法(检索)
    python 使用 elasticsearch 常用方法(索引)
    ElasticSearch集群状态查看命令大全(转)
    用C#实现修改网页数据
    基于jQuery可悬停控制图片轮播代码
  • 原文地址:https://www.cnblogs.com/mingyoujizao/p/9521875.html
Copyright © 2011-2022 走看看