h 只⽤于整型的格式字符修正为short例:%hd , %hx , %ho , %hu2) 格式字符 指定输出项的数据类型和输出格式。
| i (%i与%d的区别, 在printf中这两者没有区别,但是在scanf中略有不同,⽐如scanf(\"%i%d\ 如果你输⼊ 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位有效数字) %E和%G只是在输出时⽤⼤写字母(E)代替了⼩写字母(e) %%格式⽤于打印⼀个%字符。 输出正负号的技巧,例如:printf(\"%+d %+d %+d\\n\
只要在中间加个“+”号就⾏,作⽤是输出符号位(即,数的正负号)
如果不希望正数的前⾯出现‘+’号,只要在“% d”中间加个“ ”号(即空格)就⾏,例如:int i;
for(i=-3;i<=3;i++)
printf(\"% d\\n\注意%和d之间有⼀个空格
2. 转义字符\\a: 蜂鸣,响铃\\b: 回退:向后退⼀格\\f: 换页
\\n: 换⾏,光标到下⾏⾏⾸\\r: 回车,光标到本⾏⾏⾸\: ⽔平制表\\v: 垂直制表\\\\: 反斜杠\\': 单引号\\\": 双引号\\?: 问号
\\ddd: 1到3位⼋进制数所代表的字符\\xhh: 1到2位⼗六进制数所代表的字符\\0: 空字符(NULL),什么都不做
注:
l \\v垂直制表和\\f换页符对屏幕没有任何影响,但会影响打印机执⾏响应操作。l \\n其实应该叫回车换⾏。换⾏只是换⼀⾏;\\r回车只是回到⾏⾸。l \ 光标向前移动四格或⼋格,可以在编译器⾥设置
l \\' 在字符⾥(即单引号⾥)使⽤。在字符串⾥(即双引号⾥)不需要,只要⽤ ' 即可。例:
如果在字符'a'中直接使⽤',就会出现这种情形:'a'' ,编译器会报错,因为编译器会认为多写了⼀个单引号。所以在字符中时,必须使⽤\\',以避免歧义性。
如果为了在字符串⾥⾯添加⼀个单引号,直接⽤单引号 ' 即可,如果⽤转义字符 \\' 的话就会把\\'两者直接算进去。
其实格式控制符还有很多功能,就不⼀⼀介绍了。。。