printf函数的格式化输出
printf函数能够以精确的格式输出结果。每次调用printf时都要包含描述输出格式的格式控制串。格式控制串是由转换说明符、标志、域宽、精度构成。转换说明符与百分号一起使用就构成了“转换规范”。
printf函数的一般格式
printf(格式控制,输出表列) |
printf("%d %d",a,b) 如果a、b的值分别是17和21,则输出为: 17 21 printf("a=%d b=%d",a,b) 如果a、b的值分别是3和4,则输出为: a=3 b=4(注意输出时的空格) |
输出整数
转换说明符 | 描述 |
d | 显示一个带符号的十进制数 |
i | 显示一个带符号的十进制数(i和d在用在scanf函数中时是不同的) |
o | 显示一个无符号的八进制数 |
u | 显示一个无符号的十进制数(unsigned型) |
x或X | 显示一个无符号的十六进制数,X可用来显示数字0~9和字母A~F,x可用来显示数字0~9和字母a~f |
h或l | 放在整数转换说明符之前表示分别显示short和long类型的整数值。 |
输出浮点数
转换说明符 | 描述 |
e或E | 以指数形式显示浮点数 |
f | 显示浮点值 |
g或G | 以浮点形式f或指数形式e(或E)显示符浮点数 |
L | 放在浮点数转换说明符之前说明要显示long double类型的整数值 |
输出字符串和字符
转换说明符 | 描述 |
c | 用来输出一个char型字符 |
s | 用来输出一个字符串,要求一个指向char型的指针参数 |
输出的域宽和精度
用于存放输出数据的宽度称为“域宽”。如果域宽大于被打印数据的宽度,数据通常会在域内
右对齐。如果输出值的宽度大于域宽时,域宽是自动增长的。域宽通常插在百分号和转换说明符之间。
printf("%4d\n",123) printf("%4d\n",1234) printf("%4d\n",12345) 则输出结果为: 123 1234 12345 |
用printf函数也可以指定输出数据的精度。对於不同的数据类型,精度有不同的含意。
用于整数转换说明符,精度表示至少要输出的数字个数(如果被输出的数字个数小於只指定的精度,就在输出值前面加0)。
用于整数转换说明符,精度表示至少要输出的数字个数(如果被输出的数字个数小於只指定的精度,就在输出值前面加0)。
printf("%.4d\n",873) printf("%.9d\n",873) 则输出结果为: 0873 000000873 |
用于浮点数转换说明符e、E、f,精度是小数点后面显示的数字个数。
printf("%.3f\n",123.45678) printf("%.3e\n",123.45678) 则输出结果为: 123.456 1.235e+02 |
用于浮点数转换说明符g、G,精度是打印出的有效数字的最大个数。
printf("%.3g\n",123.45678) 则输出结果为: 123 |
用于字符串说明符s时,精度是被输出的字符的最大个数。
printf("%.11s\n","Happy birthday") 则输出结果为: Happy birth |
输出转义字符
字符形式 | 功能 |
\n | 换行 |
\t | 横向跳格 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 走纸换页 |
\\ | 反斜杠字符“\” |
\' | 单引号字符“'” |
\ddd | 一到三位8进制数所代表的字符 |
\xhh | 一到二位16进制数所代表的字符 |
在printf的格式控制串中使用标志
标志 | 描述 |
-(减号) | 使输出在域宽中左对齐 |
例题
例1. 输出整数
#include <stdio.h> main( ) { printf("%d\n",455); printf("%i\n",455); /*在printf中,i和d是等价的*/ printf("%d\n",+455); printf("%hd\n",32000); printf("%ld\n",2000000000); printf("%o\n",455); printf("%u\n",455); printf("%u\n",-455); printf("%x\n",455); printf("%X\n",455); return 0; } |
上面的程序输出以下的结果 |
455 455 455 32000 2000000000 707 455 4294966841 1c7 1C7 |
例2. 输出浮点数
#include <stdio.h> main( ) { printf("%e\n",1234567.89); printf("%e\n",+1234567.89); printf("%e\n",-1234567.89); printf("%E\n",1234567.89); printf("%f\n",1234567.89); printf("%g\n",1234567.89); printf("%G\n",1234567.89); return 0; } |
上面的程序输出以下的结果 |
1.234568e+06 1.234568e+06 -1.234568e+06 1.234568E+06 1234567.890000 1.234567e+06 1.234567E+06 |
默认情况下,用转换说明符e、E、和f打印出的值带6个小数位。
例3. 输出域宽
#include <stdio.h> main( ) { printf("%4d\n",1); printf("%4d\n",12); printf("%4d\n",123); printf("%4d\n",1234); printf("%4d\n\n",12345); printf("%4d\n",-1); printf("%4d\n",-12); printf("%4d\n",-123); printf("%4d\n",-1234); printf("%4d\n",-12345); return 0; } |
上面的程序输出以下的结果 |
1 12 123 1234 12345 -1 -12 -123 -1234 -12345 |
小练习
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论