Printf中的行缓冲以及让printf输出
2016-07-16 09:59
190 查看
1、缓冲区的定义(即什么是缓冲区):缓冲区又称为缓存它是内存空间的一部分。也就是说在内存空间中预留了一定的存储空间这些存储空间用来缓冲输入或输出的数据这部 分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备分为输入缓冲区和输出缓冲区。
2、引入缓冲区的原因:缓冲区就是一块内存区它用在输入输出设备和CPU之间用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作避免低速的输入输出设备占
用CPU解放出CPU使其能够高效率工作。
3、在C编程中缓冲可以分为:行缓冲、全缓冲、不带缓冲三种
4、全缓冲:当缓冲区满时就会被自动刷新,不同系统的缓冲区大小不同
不带缓冲:也就是不进行缓冲标准出错情况stderr是典型代表这使得出错信息可以直接尽快地显示出来。
行缓冲:当缓冲区满时不会自动刷新且无法继续输入,需要按回车才可以刷新缓冲区当在输入和输出中遇到换行符时执行真正的I/O操作。这时我们输入的字符先存放在缓冲 区等按下回车键换行时才进行实际的I/O操作。
5、缓冲区的刷新:在满足以下4种情况时缓冲区刷新
①缓冲区满
②执行flush语句
③执行endl语句
④关闭文件
6、printf为行缓冲,与scanf储存在同一个缓冲区
7、printf()函数是格式化输出函数,
一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。
8、printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。其中格式化字符串包括两部分内容:
一部分是正常字符,
这些字符将按原样输出;
另一部分是格式化规定字符, 以"%"开始,后跟一个或几个规定字符,
用来确定输出内容格式。
9、参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多,
各参数之间用","分开,
且顺序一一对应,
否则将会出现意想不到的错误。
10、格式化字符串的格式是:%[标志][输出最小宽度][.精度][长度]格式字符
标志:标志字符为-、+、#、空格四种,其意义下表所示:
标志 意义
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
空格 输出值为正时冠以空格,为负时冠以负号
# 对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前加0x;对e,g,f
类当结果时才给出小数点.
例1:
#include<stdio.h>
int main()
{
int a=100;
float b=123.255;
printf("a=%d ",a);
printf("a=%10d ",a);
printf("a=%-10d ",a);
printf("a=%+d ",a);
printf("a=% d ",a);
printf("a=%#o ",a);
printf("a=%#x ",a);
printf("b=%#f ",b);
}
运行结果:
a=100
a= 100
a=100
a=+100
a= 100
a=0144
a=0x64
b=123.254997
11、输出最小宽度:用十进制整数来表示输出的最少位数。(至少要输出这么多位!)若实际位数多于定义的宽度:则按实际位数输出。 若实际位数少于定义的宽度:则右对 齐,左边留空。 有负号,左对齐,右边留空,表示宽度的数字以0开始,则右对齐,左边留空。
例2 #include<stdio.h>
int main()
{
int a=3456;
printf("a=%3d ",a); //若实际位数多于定义的宽度:则按实际位数输出
printf("a=%10d ",a); //若实际位数少于定义的宽度:则右对齐,左边留空
printf("a=%-10d ",a); //若实际位数少于定义的宽度:有负号,左对齐,右边留空
printf("a=%010d ",a); //若实际位数少于定义的宽度:表示宽度的数字以0开始,则右对齐,左边留空
printf("a=%-010d ",a); //左对齐,0无意义。
}
运行结果:
a=3456
a= 3456
a=3456
a=0000003456
a=3456
12、精度:精度格式符以“.”开头,后跟十进制整数。
意义是:(1)如果输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。若不足则补0;
(2)如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
13、长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出
2、引入缓冲区的原因:缓冲区就是一块内存区它用在输入输出设备和CPU之间用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作避免低速的输入输出设备占
用CPU解放出CPU使其能够高效率工作。
3、在C编程中缓冲可以分为:行缓冲、全缓冲、不带缓冲三种
4、全缓冲:当缓冲区满时就会被自动刷新,不同系统的缓冲区大小不同
不带缓冲:也就是不进行缓冲标准出错情况stderr是典型代表这使得出错信息可以直接尽快地显示出来。
行缓冲:当缓冲区满时不会自动刷新且无法继续输入,需要按回车才可以刷新缓冲区当在输入和输出中遇到换行符时执行真正的I/O操作。这时我们输入的字符先存放在缓冲 区等按下回车键换行时才进行实际的I/O操作。
5、缓冲区的刷新:在满足以下4种情况时缓冲区刷新
①缓冲区满
②执行flush语句
③执行endl语句
④关闭文件
6、printf为行缓冲,与scanf储存在同一个缓冲区
7、printf()函数是格式化输出函数,
一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。
8、printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。其中格式化字符串包括两部分内容:
一部分是正常字符,
这些字符将按原样输出;
另一部分是格式化规定字符, 以"%"开始,后跟一个或几个规定字符,
用来确定输出内容格式。
9、参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多,
各参数之间用","分开,
且顺序一一对应,
否则将会出现意想不到的错误。
10、格式化字符串的格式是:%[标志][输出最小宽度][.精度][长度]格式字符
标志:标志字符为-、+、#、空格四种,其意义下表所示:
标志 意义
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
空格 输出值为正时冠以空格,为负时冠以负号
# 对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前加0x;对e,g,f
类当结果时才给出小数点.
例1:
#include<stdio.h>
int main()
{
int a=100;
float b=123.255;
printf("a=%d ",a);
printf("a=%10d ",a);
printf("a=%-10d ",a);
printf("a=%+d ",a);
printf("a=% d ",a);
printf("a=%#o ",a);
printf("a=%#x ",a);
printf("b=%#f ",b);
}
运行结果:
a=100
a= 100
a=100
a=+100
a= 100
a=0144
a=0x64
b=123.254997
11、输出最小宽度:用十进制整数来表示输出的最少位数。(至少要输出这么多位!)若实际位数多于定义的宽度:则按实际位数输出。 若实际位数少于定义的宽度:则右对 齐,左边留空。 有负号,左对齐,右边留空,表示宽度的数字以0开始,则右对齐,左边留空。
例2 #include<stdio.h>
int main()
{
int a=3456;
printf("a=%3d ",a); //若实际位数多于定义的宽度:则按实际位数输出
printf("a=%10d ",a); //若实际位数少于定义的宽度:则右对齐,左边留空
printf("a=%-10d ",a); //若实际位数少于定义的宽度:有负号,左对齐,右边留空
printf("a=%010d ",a); //若实际位数少于定义的宽度:表示宽度的数字以0开始,则右对齐,左边留空
printf("a=%-010d ",a); //左对齐,0无意义。
}
运行结果:
a=3456
a= 3456
a=3456
a=0000003456
a=3456
12、精度:精度格式符以“.”开头,后跟十进制整数。
意义是:(1)如果输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。若不足则补0;
(2)如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
13、长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出
相关文章推荐
- HTML表单提交
- 初涉HTML(2)
- RX(Reactive Extinsion)和IX(Interactive Extinsion)库改名了
- MySQL Cluster 集群简介
- "undefined reference to" 问题解决方法
- 图像、画布大小
- 单精度和双精度浮点数数据类型
- 教你在面试中如何从容的解决各类问题
- Linux目录介绍
- P 4000 HP实现AOP(1)
- 关于mac 提交代码到github上的流程(详解)
- 隆中对,程序员修炼之道,技术学习前进之路
- 隆中对,程序员修炼之道,技术学习前进之路
- 隆中对,程序员修炼之道,技术学习前进之路
- MySQL Cluster 数据分布(分区、分组)
- 367. Valid Perfect Square
- 【旧思路】云mail发送和云图片存储
- C++随机选择的实现 rand函数和rand_r
- python set集合运算(交集,并集,差集,对称差集)
- MySQL Cluster 7.3.5 集群配置参数优化(优化篇)