zoukankan      html  css  js  c++  java
  • 结合getchar()理解缓冲区

    测试用例

    #include <stdio.h>
    int main() 
    {
    	char c;
    	c = ' ';
    	while(c != '
    ')	
        {
    		c = getchar();
    		printf("%c %5d 
    ", c, c);
    	}
    	return 0;
    }
    

    Output

    Question

    1、getchar()明明只能获取一个键盘输入的字符,为什么当我们输入一个字符后,并没有进行输出,而是全部输入后,才进行输出?
    2、换行符后为什么还有一个换行符(ASCII 为 10)

    Illustration

    当程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。

    Notice

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

    缓冲区定义

    缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

    【Notice】标准C(ANSI C)语言库函数操作才会存在缓冲区。

    为什么要引入缓冲区

    当我们从磁盘中读取信息的时候,为了加快读取速度,会先将数据放置到缓冲区,以减少磁盘的读写次数

    缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

    刷新缓冲区

    1、缓冲区满时;
    2、行缓冲区遇到回车时;
    3、关闭文件;
    4、使用特定函数fflush()刷新缓冲区。

    因此,写文件(设备文件除外),并不会直接写到文件中,会先放在缓冲区,默认情况下,关闭文件或者缓冲区满后才写到文件。

  • 相关阅读:
    Lua 语言学习
    Unity EasyTouch官方案例学习
    Unity Dotween官方案例学习
    斗地主出牌规则
    C# XML文件读取
    斗地主项目总结
    C# 委托和事件
    C# 观察者模式
    消防法及相关法律法规(二)
    消防法及相关法律法规(一)
  • 原文地址:https://www.cnblogs.com/zhyantao/p/11328826.html
Copyright © 2011-2022 走看看