Home C&C++函数库 c++ 语法 程序源码 Linux C库

printf

函数  <cstdio>

int printf ( const char * format, ... );
将格式化的数据打印到标准输出
将format指向的C字符串写入标准输出(stdout)。如果format包含格式说明符(以%开头的子序列), 则format后面的附加参数将被格式化并插入到结果字符串中,替换它们各自的说明符。

☲  参数



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

它可以选择性地包含嵌入的格式说明符,这些格式说明符被随后的附加参数中指定的值替换, 并按照请求进行格式化。

格式说明符遵循这个原型:[参见下面的兼容性说明]

%[flags][width][.precision][length]specifier

其中,末尾的说明符字符是最重要的部分,因为它定义了类型和对应参数的解释:
说明符 输出 范例
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 不打印任何东西.
对应的实参必须是指向signed int型的指针。
到目前为止写入的字符数存储在指定的位置。
% 后跟另一个%字符的%将向标准输出写入单个%。 %
格式说明符还可以包含子说明符:flags、width、.precision和modifiers(按顺序), 这些都是可选的,并遵循以下规范:
flags 说明
- 在给定的字段宽度内左对齐;右对齐是默认值(参见宽度(width)子说明符)。
+ 对正数强制在结果前面加上一个正号或负号(+或-)。默认情况下,只有负数前面有-号.
(space) 如果不写符号,则在值之前插入一个空格。
# 与o, x或x指示符一起使用,对于不同于零的值,值前面分别有0,0x或0x。
与a, A, e, E, f, F, g或G一起使用,它强制输出包含一个小数点, 即使后面没有更多的数字。默认情况下,如果后面没有数字,则不写小数点。
0 当指定填充时,用0(0)左填充数字,而不是空格(参见宽度(width)子说明符)。
width 说明
(number) 要打印的最小字符数。如果要打印的值比这个数字短,结果将用空格填充。即使结果更大,该值也不会被截断。
* 宽度(width)不是在格式字符串中指定的,而是作为必须格式化的参数前面的一个附加整数值参数。
.precision 说明
.number 对于整数说明符(d, i, o, u, x, X) : 精度(precision)指定要写入的最小数字数。
如果要写入的值比这个数字短,结果将用前导零填充。即使结果较长, 该值也不会被截断。精度(precision)为0意味着不为值0写入字符。

对于a, A, e, E, f和F说明符 : 这是小数点后要打印的位数(默认是6)。

对于g和g说明符 : 这是要打印的最大有效位数。

对于s:这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结束的空字符为止。

如果指定的周期没有明确的精度值,则假定为0。
.* 精度(precision)不是在格式字符串中指定的,而是作为必须格式化的参数前面的一个附加整数值参数。
长度子说明符修改数据类型的长度。这是一个图表,显示了用于解释有长度说明符和没有长度说明符的相应参数的类型 (如果使用不同的类型,如果允许,将执行相应的类型提升或转换):
说明符
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


注意,c说明符接受一个int(或wint_t)作为参数, 但是在格式化输出之前执行到一个char值(或wchar_t)的适当转换。
注意:绿色行表示C99引入的说明符和子说明符。有关扩展类型的说明符,请参阅<cinttypes>。

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

☉  返回值



如果成功,则返回所写的字符总数。

如果发生写错误,则设置错误指示符(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


⇄  兼容性



特定的库实现可能支持附加的说明符和子说明符。
这里列出的是最新的C和c++标准(都是在2011年发布的)所支持的,但是绿色的是在C99中引入的 (自c++ 11以来只对c++实现有要求),并且可能不被符合旧标准的库所支持。

🍄  另请参阅



scanf 从stdin读取格式化的数据(function )
fprintf 将格式化数据写入流(function )
fwrite 将数据块写入流(function )
puts 将字符串写入标准输出(function )

联系我们 免责声明 关于CandCplus 网站地图