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
只用于整型的格式字符修正为 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'' ,编译器会报错,因为编译器会认为多写了一个单引号。
所以在字符中时,必须使用\',以避免歧义性。
如果为了在字符串里面添加一个单引号,直接用单引号 '  即可,如果用转义字符 \' 的话就会把\'两者直接算进去。