C Traps and Pitfalls Appendix A:printf详解
[转自http://jicheng.ycool.com/post.2338691.html]
简单格式类型:%d:十进制方式输出一个有符号整数%u:十进制方式输出一个无符号整数。例子:printf("%u\n",-37);4294967259前 提是32位机器。%o:八进制方式输出无符号整数。%x,%X:十六进制方式输出无符号整数。%x用小写字母输出abcdef,%X用大 写。
%s:输出字符串,以NULL对应%s的结果是未知的。
%c:输出单个字符。
%g:输出浮点数,去掉数值尾缀的0,保留六位有效数字。
printf("%g %g %g %g %g\n",1/1.0,1/2.0,1/3.0,1/4.0,0.0);
1 0.5 0.333333 0.25 0
printf("%g\n",2.0/3.0)
0.666667 (不是直接截断,而是四舍五入。)
printf("%g\n",123456789.0);
1.23457e+08
当小数的指 数小于或等于-5,%g才会采用科学计数法来表示。
%e:输出浮点数,一律显式的使用指数形式。例如pie
3.141593e+00,%e将打印小数点后六位有效数字。
%f:输出浮点数。禁止使用指数形式。例如pie
3.141593,数值精度方面%f和%e相同。
%E:与%e相同,但是E代替e。
%G:与%g相同,但是E代替e。
%%:表示一个‘%’字符。
宽度修饰符:在固定域长度内打印数值。
int i;
for( i = 0;i <=10;i++)
printf("%2d %2d *\n",i,i*i);
0 0 *
...
10 100 *
当100超过域显示范围时,域将自动扩展。
宽 度修饰符对所有的格式码都有效,甚至包括%%
printf("%8%");
%
精度修饰符:控制一个数值中显示的位数。
精度修饰符位于宽度修饰符之后,长度修饰符之前。
对于%d,%o,%x,%u,精度修饰符 确定其最少打印位数。
printf("%.2d/%.2d/%.4d\n",7,14,1789);
07/14/1789
对于%e,%E,%f:修饰了小数点后应该出现的数字位数。除非表示另有指定,
仅当精度大于0时打印的数值中才会出现小数点。
prinf("%.0f %.1f %.2f %.3f %.6f %.10f",pi,pi,pi,pi,pi,pi);
3 3.1 3.14 3.142 3.141593 3.1415926536
printf("%.0e %.1e %.2e %.10e",pi,pi,pi,pi);
3e+00 3.1e+00 3.14e+00 3.1415926536e+00
对于%g,%G:指定了有效数字位数。如果小数点后不跟位数则小数点则被删除。
printf("%.1g %.2g %.4g %.8g",10/3.0,10/3.0,10/3.0,10/3.0);
3 3.3 3.333 3.3333333
对于%s:修饰了要从字符串中打印的字符数。如果字符串中字符少于指定的字符数。
输出的字符数就会少于精度修饰符指定的个数。如果需要可以 用宽度修饰符加宽输出。
char name[14];
printf("... %.14s ... ",...,name,...);
标识:在%和域宽修饰符之间加上标识。以微调格式项。
-:在显示宽度大于被显示位数,默认为右对齐。以下可以让其左对齐。
char name[15];
printf("%14...",name);
RobertTank ...
+:打印任何数字前面都会 有符号,0的符号为+.
printf("%+d %+d %+d",5,0,-5);
+5 +0 -5
空白字符:同+,但是不打印加号,加号的位置空出。
printf("% d\n% d",5,-5);
5
-5
#:
对于%o,在有必要是在前面加“0”
对于%x,%X,在前面加上0x
对于浮点数:要求小数点必须被打印,且最后的0不 被去掉。
printf("%.0f %#.0f %g %#g\n",3.0,3.0,3.0,3.0);
3 3. 3 3.00000
有时,字符串的长度是由常量确定的
#define MAXLENGTH 14
char name[MAXLENGTH];
...
printf("... %.14",name);
但有没有办法直接在printf里直接用宏。因为宏替换不能进入字符串内。
可以用可变域宽来解决:
printf("%*.*s\n",12,5,name);
它 完全等效于
printf("%12.5s\n",name);
printf("%*%\n",n);
先打印n-1个空格,再打印%
%p:打印一个指针,通常是打印出地址。
%n:指出打印的字符数。
int n;
printf("hello\n%n",&n);
执 行完后n=6.

浙公网安备 33010602011771号