C语⾔的格式控制符
1. 格式控制符
格式输出printf 作⽤是向终端输出若⼲个类型任意的数据。
格式:printf (格式控制符,输出列表)
1) 格式控制符
l % 格式说明引导符。
l - 指定左对齐输出。
l 0 指定空位填零。
l m.n 指定输出域宽度及精度
m表⽰数据最⼩宽度,如果实际数据宽度>m,按实际数据宽度输出,如果实际数据宽度<m,左边补空格。n对于实数来讲表⽰n位⼩数,对于字符串来讲,表⽰截取的字符个数
l l,h 输出长度的修正
l对整型指定长整型long
例:%ld , %lx , %lo , %lu
l对实型指定双精度double
例:%lf
h 只⽤于整型的格式字符修正为short
例:%hd , %hx , %ho , %hu
2) 格式字符 指定输出项的数据类型和输出格式。
| i (%i与%d的区别, 在printf中这两者没有区别,但是在scanf中略有不同,⽐如scanf("%i%d",&a,&b);
如果你输⼊ 012 012 之后a=12 ,b=10, %i会把⼋进制和⼗六进制转换成⼗进制后写⼊)
l d 有符号⼗进制整数。
l o ⽆符号⼋进制数。
l x ⽆符号⼗六进制数(⼩写的x格式中⽤⼩写字母a,b,c,d,e,f来表⽰10到15之间的数,⼤写的X则⽤⼤写的ABCDEF来表⽰10到15之间的数)
l u 不带符号的⼗进制整数。
l c 输出⼀个字符。
l s 输出⼀个字符串
l e 以指数形式输出实型数。
l f 以⼩数形式输出实型数(单精度,或称浮点数)。
l g ⾃动决定输出格式为e和f中较短的⼀种,不打印⽆效的零。
l % 输出%
补充:%a(%A) 浮点数、⼗六进制数字和p-(P-)记数法(C99)
%p 指针
注意:
对于单精度数,使⽤ %f 格式符输出时,仅前7位是有效数字,⼩数6位(有效数字定义:在⼀个中,从左边第⼀个不是0的数字起,到精确到末位数⽌,所有的数字,都叫这个近似数字的有效数字)。
对于双精度数,使⽤ %lf 格式符输出时,前16位是有效数字,⼩数6位。
编译程序只是检查printf 函数的调⽤形式,不分析格式控制字符串,如果格式字符与输出项的类型不匹配,不进⾏类型转换(输出的数为随机)。
格式控制字符串中可以包含。
格式控制字符串中的普通字符则原样输出。
输出项的参数除了常数、变量外还可以是表达式、函数调⽤。
%g,%f和%e这三个格式⽤于打印浮点值,%g格式⽤于打印那些不需要按列对齐的浮点数特别有⽤,其作⽤有:
a) 去掉该数尾多余的零(没有达到六位的数)
b) 保留六位有效数字(多余六位的)
%e格式⽤于打印浮点数时,⼀律显式地使⽤指数形式
例如:输出圆周率时是:3.141593e+00
它们的区别:
%g格式打印出的数是总共6位有效数字
%e格式打印出⼩数点后的6位有效数字
%f禁⽌使⽤指数形式来表⽰浮点数,因此圆周率输出为:3.141593(但注意它的精度要求:也是⼩数点后6位有效数字)
printf函数中的格式控制包括%E和%G只是在输出时⽤⼤写字母(E)代替了⼩写字母(e)
%%格式⽤于打印⼀个%字符。
输出正负号的技巧,例如:
printf("%+d %+d %+d\n",-5,0,5);
只要在中间加个“+”号就⾏,作⽤是输出符号位(即,数的正负号)
如果不希望正数的前⾯出现‘+’号,只要在“% d”中间加个“ ”号(即空格)就⾏,例如:
int i;
for(i=-3;i<=3;i++)
printf("% d\n",i); // 注意%和d之间有⼀个空格
2. 转义字符
\a: 蜂鸣,响铃
\b: 回退:向后退⼀格
\f: 换页
\n: 换⾏,光标到下⾏⾏⾸
\r: 回车,光标到本⾏⾏⾸
\t: ⽔平制表
\v: 垂直制表
\\: 反斜杠
\': 单引号
\": 双引号
\?: 问号
\ddd: 1到3位⼋进制数所代表的字符
\xhh: 1到2位⼗六进制数所代表的字符
\0: 空字符(NULL),什么都不做
注:
l \v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执⾏响应操作。
l \n其实应该叫回车换⾏。换⾏只是换⼀⾏;\r回车只是回到⾏⾸。
l \t 光标向前移动四格或⼋格,可以在编译器⾥设置
l \' 在字符⾥(即单引号⾥)使⽤。在字符串⾥(即双引号⾥)不需要,只要⽤ ' 即可。
例:
如果在字符'a'中直接使⽤',就会出现这种情形:'a'' ,编译器会报错,因为编译器会认为多写了⼀个单引号。
所以在字符中时,必须使⽤\',以避免歧义性。
如果为了在字符串⾥⾯添加⼀个单引号,直接⽤单引号 ' 即可,如果⽤转义字符 \' 的话就会把\'两者直接算进去。其实格式控制符还有很多功能,就不⼀⼀介绍了。。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论