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)
格式字符 指定输出项的数据类型和输出格式。
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
位有效数字)
?
%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
之间有一个空格
如果还有问题没搞清楚,可以参考这篇博客:http://zqwt.012.blog.163.com/blog/static/1204468420101028409622/
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'' ,编译器会报错,因为编译器会认为多写了一个单引号。
所以在字符中时,必须使用\',以避免歧义性。
如果为了在字符串里面添加一个单引号,直接用单引号 ' 即可,如果用转义字符 \' 的话就会把\'两者直接算进去。
转载于:https://blog.51cto.com/wellwy/493665