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 或 %f | 392.65 |
G | 使用最短的表示: %E 或 %F | 392.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 i | u o x X | f F e E g G a A | c | s | p | n |
---|---|---|---|---|---|---|---|
(none) | int | unsigned int | double | int | char* | void* | int* |
hh | signed char | unsigned char | signed char* | ||||
h | short int | unsigned short int | short int* | ||||
l | long int | unsigned long int | wint_t | wchar_t* | long int* | ||
ll | long long int | unsigned long long int | long long int* | ||||
j | intmax_t | uintmax_t | intmax_t* | ||||
z | size_t | size_t | size_t* | ||||
t | ptrdiff_t | ptrdiff_t | ptrdiff_t* | ||||
L | long 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