C stdio printf() 函数

定义和用法

printf() 函数将格式化的字符串写入控制台。

printf() 函数定义在 <stdio.h> 头文件中。

注意:更准确地说,它写入由 stdout 指定的位置,stdout 通常指向控制台,但也可以配置为指向文件或其他位置。

格式说明符

格式字符串可以包含格式说明符,这些说明符描述如何以及在何处表示传递给函数的附加参数。

格式说明符的形式为 %[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_tuintmax_t 类型的整数。
z 期望 size_t 类型的整数。
t 期望 ptrdiff_t 类型的整数。
L 期望 long double 类型的浮点数。

specifier(说明符):必需。一个字符,指示应如何表示参数的数据。下表列出了可能的字符:

说明符列表

字符 说明符 描述
di 十进制整数 将整数表示为十进制整数。
u 无符号十进制整数 将整数表示为无符号十进制整数。
o 八进制整数

将整数表示为八进制整数。

"#" 标志会在数字前加上 "0"。

xX 十六进制整数

将整数表示为十六进制整数。

"#" 标志会在数字前加上 "0x"。

如果使用 "X",则数字 AF 和字母 X 以大写显示。

fF 浮点数

表示浮点数。如果使用 "F",则字母(如 "nan" 中的字母)以大写表示。

"#" 标志会强制显示小数点,即使没有小数位数。

eE 科学计数法

以科学计数法表示浮点数。

如果使用 "E",则字母以大写表示。

"#" 标志会强制显示小数点,即使没有小数位数。

gG 通用数字

对浮点数使用 fe 中最短的表示。

如果使用 "G",则在 FE 之间选择。

aA 十六进制浮点数

用十六进制数字显示浮点数的内部表示。

如果使用 "A",则数字以大写表示。

c 字符

表示一个字符。

如果参数是整数,则表示由该整数指定的 ASCII 值的字符。

s 字符串 表示一个字符串。
p 指针 表示指针的内存地址,通常用十六进制数字。
n 无输出

将到目前为止已打印的字符数写入参数。

参数必须是指向整数的指针。

% 百分号 表示字面量 "%" 字符。

实例

例子 1

输出字符串:

printf("Hello World!");

亲自试一试

例子 2

表示各种类型的整数:

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);

亲自试一试

例子 3

以多种方式表示整数:

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" 前缀的大写十六进制

亲自试一试

例子 4

以多种方式表示浮点数:

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 位小数

亲自试一试

例子 5

使用 %n 说明符测量字符串的长度:

// 为字符串保留 20 字节内存
char myString[20] = "Hello World!\0";
int memorySize = sizeof(myString);
int stringSize;

// 打印字符串并使用 %n 测量其长度
printf("%s%n\n", myString, &stringSize);

// 打印字符串的大小
printf("Memory size: %d\n", memorySize);
printf("String size: %d\n", stringSize);

亲自试一试

语法

printf(const char * format, arg1, arg2...);

参数

参数 描述
format 必需。表示要写入文件的数据格式的字符串。
arg1, arg2... 可选。任意数量的附加参数,可以使用格式参数中的说明符对其值进行格式化和打印到控制台。

技术细节

返回:

int 值,表示打印的字符数。

如果发生错误,则返回负数。