printf()输出格式

int printf ( const char * format, … )

  • 将格式化的数据打印到标准输出

printf()函数将上述函数定义中format指向的C字符串写到标准输出。如果format中包含了格式说明符(以%开头的子序列),则format之后的附加参数将被格式化并插入到字符串中代替对应的说明符。

参数

1. format

  • 包含了要写入标准输出的文本的C字符串

它可以可选地包含一些格式说明符,这些说明符可以被附加参数替换并按要求格式化。
格式说明符的形式如下:
%[标志][宽度][.精度][长度]类型

1.1 类型

类型输出例子
d或i带符号十进制整形392
u无符号十进制整形7235
o无符号八进制数610
x无符号十六进制整形7fa
X无符号十六进制整形(大写)7FA
f十进制浮点数,小写392.65
F十进制浮点数,大写392.65
e科学计数法(尾数/指数),小写3.9265e+2
E科学计数法(尾数/指数),大写3.9265E+2
g使用最短的表示: %e 或 %f392.65
G使用最短的表示: %E 或 %F392.65
a十六进制浮点数,小写-0xc.90fep-2
A十六进制浮点数,大写-0XC.90FEP-2
c字符a
s字符串sample
p指针地址b8000000
n不打印。相应的参数必须是指向带符号整形的指针,到目前为止写入的字符数将被存储在指向的位置。
%跟在一个%字符后面的另一个%将会写入一个%%


1.2 标志

标志描述
-在给定字段宽度内左对齐; 右对齐是默认的(见宽度子说明符)。
+使结果带上正负符号(+或-)即使结果是正数;默认只有负数才会有正负符号。
(space)如果没有写入正负符号,则插入一个空格。
#与o,x或X说明符一起使用,会在0以外的数字前加上0,0x或0X的前缀;与a,A,e,E,f,F,g或G一起使用,即使没有小数,也会强制书写输出包含一个小数点。,默认情况下,如果没有小数,则不会写入小数点。
0在填充时,用零(0)替代空格(见宽度子说明符)。


1.3 宽度

宽度描述
(数字)要打印的最小字符数。如果要打印的值长度小于此数字,结果将填充空格;若值长度大于此数字,该值也不会被截断。
*宽度在format字符串中未指定,但需要在附加参数中指定。


1.4 精度

精度描述
.数字对于整数类型(d,i,o,u,x,X):精度指定要写入的最小位数:如果要写入的值比此数字短,结果将以前导零填充;即使结果较长,该值也不会被截断;精度为0表示对于值0,没有字符被写入。对于a,A,e,E,f和F类型:这是小数点后要打印的位数(默认为6)。对于g和G类型:这是要打印的有效数字的最大数量。对于s类型:这是要打印的最大字符数; 默认情况下将打印所有字符,直到遇到结尾的空字符为止。如果指定精度时没有一个明确的精度值,则假定为0。
.*在format字符串中未指定精度,但需要在附加参数中指定。


1.5 长度

长度d iu o x Xf F e E g G a Acspn
(none)intunsigned intdoubleintchar*void*int*
hhsigned charunsigned charsigned char*
hshort intunsigned short intshort int*
llong intunsigned long intwint_twchar_t*long int*
lllong long intunsigned long long intlong long int*
jintmax_tuintmax_tintmax_t*
zsize_tsize_tsize_t*
tptrdiff_tptrdiff_tptrdiff_t*
Llong double

注意对于c类型:它使用了一个int(或wint_t)作为参数,但是在将其格式化为输出之前,将其转换成为了char值(或wchar_t)。

Note:加粗并斜体的符号属于C99标准

2. 附加参数

根据format字符串,该函数可能会需要附加参数序列,每个参数包含一个值,用于替换format字符串中的格式说明符(或指向存储位置的指针)。这些参数应至少与格式说明符中指定的值一样多。 函数忽略其他参数。

返回值

若执行成功,返回写入的字符总数。
如果发生写入错误,则设置错误指示器(ferror),并返回负数。
如果写入宽字符时出现多字节字符编码错误,则将errno设置为EILSEQ,并返回负数。

例子

/* printf example */
#include <stdio.h>

int main()
{
   printf ("Characters: %c %c \n", 'a', 65);
   printf ("Decimals: %d %ld\n", 1977, 650000L);
   printf ("Preceding with blanks: %10d \n", 1977);
   printf ("Preceding with zeros: %010d \n", 1977);
   printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
   printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
   printf ("Width trick: %*d \n", 5, 10);
   printf ("%s \n", "A string");
   return 0;
}

输出:

Characters: a A
Decimals: 1977 650000
Preceding with blanks: 1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick: 10
A string


翻译内容来源:http://www.cplusplus.com/reference/cstdio/printf/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值