输出格式控制
- %c 输出一个字符
- %% 百分号本身
- %s 输出一个字符串
- 在格式控制符中加上==#==前缀即可输出前缀
- %hd 、%d、%ld 以十进制、有符号的形式 short 、int、long类型的整数
- %hu 、%u、%lu 以十进制、无符号的形式 short 、int、long类型的整数
- %ho 、%o、%lo 以八进制、不带前缀、无符号的形式 short 、int、long类型的整数
- %#ho 、%#o、%#lo 以八进制、带前缀、无符号的形式 short 、int、long类型的整数
- %f、%lf 以十进制形式输出 float 、double类型的小数
- %e、%E 以指数形式输出 float 类型,输出结果中的e小写(输出结果中的E大写)
- %le、%lE 以指数形式输出 double 类型,输出结果中的e小写(输出结果中的E大写)
- %hx、%x、%lx中的x小写,表明以小写字母的形式输出十六进制数
- %hX、%X、%lX中的X小写,表明以大写字母的形式输出十六进制数
- %g 对比小数的十进制形式和指数形式,以最短的方式来输出小数,让输出结果更加简练
- printf()格式控制符完整形式:
%[flag] [width] [.precision] type
[ ] 表示此处内容可有可无,是可以省略的;
type 表示输出类型,比如%d、%f、%c,type这项必须有,这意味着输出是必须知道是什么类型;
width 表示最小输出宽度,也就是至少占用几个字符的位置;当输出结果不足width时, 以空格补齐 (如果没有指定对齐方式,默认会在左边补齐空格);当输出宽度超过width时,width不再起作用, 按照数据本身的宽度来输出;
对于printf()函数执行结束时数据并不会直接输出到显示器上,而是放入了缓冲区,直到遇到了换行符\n。
.precision 表示输出精度,也就是小数的位数。
1. 当小数部分位数大于precision时,会按照四舍五入的原则丢掉多余的数字;
2. 当小数部分小于precision时,会在后面补0;
3. 用于整数时,precision表示最小输出宽度,与width不同的是,整数宽度不足时会在左边补0,而不是补空格
4. 用于字符串是,.precision表示最大输出宽度,或者说截取字符串。当字符串的长度大于precision时,会截掉多余的字符;当字符串长度小于precision时,precision不再起作用。
5. -表示左对齐,默认是右对齐。
转义字符
- \a 响铃
- \b 退格
- \f 换页
- \n 换行,将当前位置移到下一行开头
- \r 回车,将当前位置移到本行开头
- \t 水平制表
- \v 垂直制表
- ’ 单引号
- " 双引号
- \ddd 任意三位八进制数
- \xhh 任意两位十六进制数
- \\ 反斜杠
代码演示
#include <stdio.h>
2
3 int main()
4 {
5 char ch='C';
6 char str[]="你好,北京";
7 char *p=str;
8 short sh=15;
9 short int zh=156;
10 int a=261;
11 long int li=3721;
12 long l=48321;
13 float f=95.60;
14 double d=3.1415926;
15 char *q="zh\a\ngrong\r\n";
16 printf("ch=%c\r\nsh=%d\r\nzh=%hd\r\na=%d\r\nli=%ld\r\nf=%f\r\nd=%lf\r\ns tr[]=%s\r\np=%s\r\nq=%s\r\n",ch,sh,zh,a,li,f,d,str,p,q);
17 return 0;
18 }
输出结果
注意点
- f我们输入的是95.60,默认给了我们一个六位小数,一般默认输出六位,当不够时,会输出一个非常接近的值,这与小数本身的存储机制有关。
- 当小数超过六位时,会四舍五入取近似值。
- 转义字符占用一个字符。
- 转换按数据长度增加的方向进行,以保证数据不失真,或者精度不下降。例如,int和long运算时,先将int类型转换为log类型后进行运算。
- 所有的浮点类型都是以双精度进行的,即使只有float类型,也要先转换为double类型,才能进行运算。
- char和short进行运算时,必须先转换为int类型。