C stdio printf() 函数
定义和用法
The printf()
函数将格式化的字符串写入控制台。
The printf()
函数在 <stdio.h>
头文件中定义。
注意: 更准确地说,它写入 stdout
指定的位置,该位置通常是控制台,但它可能被配置为指向文件或其他位置。
格式说明符
The format 字符串可以包含 格式说明符,这些说明符描述了在何处以及如何表示传递给函数的附加参数。
格式说明符的形式为 %[flags][width][.precision][length]specifier
。 [方括号] 中的组件是可选的。
每个组件的解释
flags
- 可选。以下任意字符的序列-
- 通过将任何填充空格添加到右侧而不是左侧来使输出左对齐。#
- 根据转换显示格式化数据的备用表示形式。+
- 使正数始终以 "+" 为前缀。0
- 在左侧用零填充数字。
width
- 可选。一个整数,指定输出应占据的最小字符数。如果需要,空格将添加到右侧以达到此数字,或者如果使用了-
标志,则添加到左侧。如果使用了*
星号,则宽度由表示的前面一个参数给出。.precision
- 可选。一个.
后面跟着一个整数,表示在格式化数据中显示的小数位数。length
- 可选。更改预期参数数据类型的字符序列。它可以是以下之一hh
- 期待char
类型用于整数。h
- 期待short int
类型用于整数。l
- 期待long int
类型用于整数。
期待wint_t
类型用于字符。
期待wchar_t*
类型用于字符串。ll
- 期待long long int
类型用于整数。j
- 期待intmax_t
或uintmax_t
类型用于整数。z
- 期待size_t
类型用于整数。t
- 期待ptrdiff_t
类型用于整数。L
- 期待long double
类型用于浮点数。
specifier
- 必需。一个字符,指示如何表示参数的数据。可能的字符列表如下表所示。
说明符列表
字符 | 说明符 | 描述 |
---|---|---|
d 或 i |
十进制整数 | 将整数表示为十进制整数。 |
u |
无符号十进制整数 | 将整数表示为无符号十进制整数。 |
o |
八进制整数 | 将整数表示为八进制整数。 "#" 标志会用 "0" 为数字加前缀。 |
x 或 X |
十六进制整数 | 将整数表示为十六进制整数。 "#" 标志会用 "0x" 为数字加前缀。如果使用 "X",则将显示 A 到 F 的数字和字母 X,字母大写。 |
f 或 F |
浮点数 | 表示一个浮点数。如果使用 "F",则字母(例如来自 "nan" 的值)将以大写形式表示。 "#" 标志会强制显示小数点,即使没有小数位数。 |
e 或 E |
科学记数法 | 以科学记数法表示浮点数。如果使用 "E",则字母将以大写形式表示。 "#" 标志会强制显示小数点,即使没有小数位数。 |
g 或 G |
通用数字 | 对浮点数使用 f 和 e 之间的最短表示形式。如果使用 "G",则它会选择 F 和 E 之间的最短表示形式。 |
a 或 A |
十六进制浮点数 | 使用十六进制数字显示浮点数的内部表示形式。如果使用 "A",则数字将以大写形式表示。 |
c |
字符 | 表示一个字符。如果参数是整数,则它表示由整数指定 ASCII 值的字符。 |
s |
字符串 | 表示一个字符串。 |
p |
指针 | 表示指针的内存地址,通常使用十六进制数字。 |
n |
无输出 | 到目前为止已打印的字符数写入参数。参数必须是指向整数的指针。 |
% |
百分号 | 表示一个字面 "%" 字符。 |
语法
printf(const char * format, arg1, arg2...);
参数值
参数 | 描述 |
---|---|
format | 必需。表示要写入文件的格式的字符串。 |
arg1, arg2... | 可选。任意数量的附加参数,它们的值可以使用 format 参数中的说明符进行格式化并打印到控制台。 |
技术细节
返回 | 一个 int 值,表示已打印的字符数。如果发生错误,则返回一个负数。 |
---|
更多示例
示例
表示各种类型的整数
char var1 = 102;
short int var2 = 2024;
int var3 = 95;
long int var4 = 212;
long long int var5 = 1200L;
printf("%hhd %hd %d %ld %lld", var1, var2, var3, var4, var5);
自己尝试 »
示例
以多种方式表示整数
int value = 1024;
printf( "%d \n", value); // 整数
printf( "%o \n", value); // 八进制
printf( "%x \n", value); // 十六进制
printf("%#o \n", value); // 带 "0" 前缀的八进制
printf("%#X \n", value); // 带 "0X" 前缀的大写十六进制
自己尝试 »
示例
以多种方式表示浮点数
float myFloat = 19.99;
printf("%f \n", myFloat); // 浮点数
printf("%e \n", myFloat); // 科学记数法
printf("%g \n", myFloat); // 最佳
printf("%.2f \n", myFloat); // 2 位小数
printf("%8.2f \n", myFloat); // 8 个字符宽,2 位小数
printf("%08.2f \n", myFloat); // 零填充,8 个字符宽,2 位小数
自己尝试 »
示例
使用 %n
说明符来测量字符串的长度
// 为字符串保留 20 字节的内存
char myString[20] = "Hello World!\0";
int memorySize = sizeof(myString);
int stringSize;
// 打印字符串并使用 %n 测量其长度
printf("%s%n\n", myString, &stringSize);
// 打印字符串的大小
printf("内存大小: %d\n", memorySize);
printf("字符串大小: %d\n", stringSize);
自己尝试 »