C语言基础④

 一、输入输出缓冲机制

1、概述

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

2、为什么要有缓冲区?

  • 减少IO设备的操作;
  • 提高计算机的运行速度。

比如:我们从磁盘里读取信息,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓 冲区的数据取完后再去磁盘中读取,这样就减少磁盘的读写次数,再加上计算机对缓冲区的操作大大 快于磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

3、缓冲区的类型

  • 全缓冲:当填满缓冲区之后,才会进行实际IO操作。 比如 对磁盘文件的读写。 ---window 全缓冲大小 4096字节 linux 全缓冲大小 1024字节;
  • 行缓冲:当在输入和输出中遇到换行符时,执行真正的IO操作,也就是冲刷缓冲区的数据。比如键盘 输入数据;
  • 不带缓冲:也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示 出来。

4、引发缓冲区的刷新

  • 遇到换行符\n;

  • 缓冲区满(溢出);

  • 执行fflush(stdout),手动刷新缓冲区

5、原理实现

0f7fb28f0b7c442e8ae6a8d656e533c5.png

说明:

  • 录入:输入输出操作的内部采用的缓冲机制,也就是当我们用 scanf() 输入数据时,并不是直接将键盘 录入的数据存储到内存变量中,而是系统会先去输入缓冲区查看是否有符合类型的数据,如果存在将 直接输入缓冲区中的数据到内存变量,此时就不用键盘录入,否则猜需要键盘录入复合类型的数据;
  • 输出:相同道理,当我们使用 printf() 输出数据时,也并不是直接将内存变量存储的数据输出到输出设 备,而是先存储到输出缓冲区,当输出缓冲区被充满,或输出缓冲区中出现换行符,或者执行 fflush() ,才会将输出缓冲区的数据输出到标准输出设备。(打印机也是,我们测试用的是控制台显示 终端)

6、预编译

在A函数需要调用B函数时,B函数必须先完成编译或预编译(得到的目标文件后缀为.obj)(预编译命令为#include)

7、printf函数

语法:printf("格式控制",输出列表);

函数原型 int printf(const char * format, ...); 变参 函数

函数作用 将指定格式的数据 输出 到 屏幕终端上(输出设备)

函数参数 format----》指定格式

...---->参数不固定

指定格式---》也就是将数据 以什么样的方式 打印到屏幕上

\n  :实现了一个行缓冲

\0  :相当于空格

8、字符格式

格式

%d --> 整型(int)数据,%c --> 字符型(char)数据,%s --> 字符串(字符序列)型数据;

%f --> 单精度浮点型(float)数据(默认输出6位小数),%lf --> 双精度浮点型(double)数据,%e --> 指数型数据(以指数形式输出1个实数,小数点前仅一位非0数字,并输出6位小数);

%hd 短整型 short int ,%hhd 字符型的ascii码 char 数据对应的ascii码 的值,%x 十六进制, %#x 十六进制 并且 十六进制 的前缀 0x也会打印出来, #o 八进制 %#o 八进制 并且 八进制的前 缀0打印出来,%p 打印内存的地址

注意:程序开发中最小的就是字符型数据,字符数据只占一个字节,只能存放0~255范围内的整数。

0f60c8aea02e4df98bda361fedaa2a23.png

9、scanf函数

语法:scanf("格式控制",输出列表);

举例:scanf("%d",&a);

0011ffce20b84e55b44d94b2c1f148d1.png

2cf5e65d76264dfe8f2c2ccee6d20315.png

3eaf07d14f2548fca5753f63a2831712.png

1a0b85de169f48ccbcf0f3f475a4eac1.png

10、转型函数

  • round(num)  -->  四舍五入
  • ceil(num)  -->  向上取整
  • floor(num)  -->  向下取整

765a494d865940a58c6f10801fcb027e.png

二、顺序结构

程序中所有语句都是按自上而下的顺序执行的,不发生跳转。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值