C语言printf()详细描述

函数

printf //头文件intclude “stdio.h”

int printf ( const char * format, ... );

描述

将格式化数据打印到标准输出,按格式指向的 C 字符串写入标准输出 (stdout)。如果 format 包含格式说明符(以%开头的子序列),则格式后面的其他参数将被格式化并插入到生成的字符串中,替换其各自的说明符。

参数

format

C 字符串,包含要写入stdout的文本。 它可以选择性地包含嵌入的格式说明符,这些说明符由后续附加参数中指定的值替换,并根据请求设置格式。
格式说明符遵循此原型: [请参阅下面的兼容性说明]

%[flags][width][.precision][length]specifier
%[标志][宽度][.精度][长度]说明符,其中末尾的说明符

其中,末尾的说明符字符[specifier]是最重要的组件,因为它定义了类型和相应参数的解释:

说明符/specifier Output Example
d or 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 没有打印任何内容。相应的参数必须是指向有符号 int 的指针。到目前为止写入的字符数存储在指向的位置。
% 一个 % 后跟另一个 % 字符会将单个 % 写入流 %

格式说明符还可以包含子说明符:标志、宽度、.精度和修饰符[flags, width, .precision and modifiers](按此顺序),它们是可选的,并遵循以下规范:

标志/flags 描述
- 在给定字段宽度内左对齐;右对齐是默认值(请参阅宽度子说明符)。
+ 即使在正数中,也会在结果前面加上加号或减号(+或-)。默认情况下,只有负数前面带有 - 符号。
(空格) 如果不打算写入任何符号,则会在值之前插入一个空格。
# 与 o、x 或 X 说明符一起使用时,对于小于零的值,值前面分别带有 0、0x 或 0X。与 a、A、e、E、f、F、g 或 G 一起使用时,它强制写入输出包含小数点,即使后面没有更多的数字。 默认情况下,如果没有数字后跟,则不写入小数点。
0 指定填充时,用零 (0) 而不是空格左填充数字(请参阅宽度子说明符)。
宽度/width 描述
(数字) 要打印的最小字符数。如果要打印的值小于此数字,则用空格填充结果。即使结果更大,也不会截断该值。
* 宽度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数指定的。
.精度/.precision 描述
.数 对于整数说明符 (d, i, o, u, x, X):精度指定要写入的最小位数。如果要写入的值短于此数字,则结果将用前导零填充。即使结果较长,也不会截断该值。精度为 0 表示不为值 0 写入任何字符。对于 a、a、e、e、f 和 F 说明符:这是小数点后要打印的位数(默认情况下为 6)。对于 g 和 G 说明符:这是要打印的最大有效位数。对于 s:这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结尾空字符。如果在指定期间时没有显式精度值,则假定为 0。
.* 精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数指定的。

长度子说明符修改数据类型的长度。这是一个图表,显示用于解释带有和不带有长度说明符的相应参数的类型(如果使用不同的类型,则执行正确的类型提升或转换(如果允许):

说明符
长度/length 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

关于说明符的注意事项:它接受 int(或 wint_t)作为参数,但在格式化输出之前执行对 char 值(或 wchar_t)的正确转换。

... (additional arguments)

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

返回值

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

/* printf example */
#include <stdio.h>
int main()
{
    
    
   printf ("Negative number: %-d\n", -10);
   printf ("Characters: %c %c \n", 'a', 18);
   printf ("Decimals: %d %ld\n", 18, 650000L);
   printf ("Preceding with blanks: %10d \n", 18);
   printf ("Preceding with zeros: %010d \n", 18);
   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;
}

输出:

Negative number: -10
Characters: a
Decimals: 18 650000
Preceding with blanks:         18 
Preceding with zeros: 0000000018 
Some different radices: 100 64 144 0x64 0144 
floats: 3.14 +3e+00 3.141600E+00 
Width trick:    10 
A string 

猜你喜欢

转载自blog.csdn.net/qq_42815643/article/details/129118943