引言
printf()
函数不仅可以将数据输出到控制台,还可以通过格式化字符串灵活地控制输出的格式。printf()
函数的使用规则,包括标志说明、字段宽度、转换精度、长度修饰、转换说明、转义字符和返回结果等内容。
1. printf()
函数概述
printf()
函数是C语言标准库中的一个格式化输出函数,定义在<stdio.h>
头文件中。它的基本语法如下:
int printf(const char *format, ...);
-
format
:格式化字符串,用于指定输出的格式。 -
...
:可变参数列表,用于提供要输出的数据。 - 返回值:成功时返回输出的字符数,失败时返回负值。
#include <stdio.h>int main() {int num = 42;printf("The answer is %d\n", num);return 0;
}
输出:
The answer is 42
2. 格式化字符串详解
格式化字符串是printf()
函数的核心,它由普通字符和格式说明符组成。格式说明符以%
开头,用于指定输出的格式。
2.1 标志说明
标志用于控制输出的对齐方式、符号显示等。常见的标志包括:
-
-
:左对齐(默认右对齐)。 -
+
:显示正数的符号。 -
(空格):正数前显示空格,负数前显示负号。 -
#
:对八进制和十六进制数添加前缀(0
或0x
)。 -
0
:用前导零填充字段宽度。
#include <stdio.h>int main() {int num = 42;printf("|%10d|\n", num); // 右对齐,宽度10printf("|%-10d|\n", num); // 左对齐,宽度10printf("|%+d|\n", num); // 显示符号printf("|% d|\n", num); // 正数前显示空格printf("|%#x|\n", num); // 十六进制带前缀printf("|%010d|\n", num); // 前导零填充return 0;
}
输出:
| 42|
|42 |
|+42|
| 42|
|0x2a|
|0000000042|
2.2 字段宽度
字段宽度用于指定输出的最小字符数。如果数据的实际宽度小于指定宽度,则用空格或前导零填充。
#include <stdio.h>int main() {int num = 42;printf("|%5d|\n", num); // 宽度5printf("|%2d|\n", num); // 宽度2(实际宽度大于指定宽度)return 0;
}
输出:
| 42|
|42|
2.3 转换精度
转换精度用于指定浮点数的小数位数或字符串的最大字符数。精度以.
开头,后跟一个整数。
#include <stdio.h>int main() {double pi = 3.1415926535;printf("|%.2f|\n", pi); // 保留2位小数printf("|%.5s|\n", "Hello, World!"); // 输出前5个字符return 0;
}
输出:
|3.14|
|Hello|
2.4 长度修饰
长度修饰用于指定参数的类型。常见的长度修饰符包括:
-
h
:短整型(如%hd
表示short int
)。 -
l
:长整型(如%ld
表示long int
)。 -
ll
:长长整型(如%lld
表示long long int
)。 -
L
:长双精度浮点型(如%Lf
表示long double
)。
#include <stdio.h>int main() {short num1 = 42;long num2 = 1234567890;long double pi = 3.1415926535;printf("|%hd|\n", num1); // 短整型printf("|%ld|\n", num2); // 长整型printf("|%.10Lf|\n", pi); // 长双精度浮点型return 0;
}
输出:
|42|
|1234567890|
|3.1415926535|
2.5 转换说明
转换说明符用于指定输出的数据类型。常见的转换说明符包括:
-
d
、i
:有符号十进制整数。 -
u
:无符号十进制整数。 -
o
:无符号八进制整数。 -
x
、X
:无符号十六进制整数(x
表示小写,X
表示大写)。 -
f
、F
:浮点数。 -
e
、E
:科学计数法表示的浮点数。 -
g
、G
:根据值的不同自动选择f
或e
格式。 -
c
:字符。 -
s
:字符串。 -
p
:指针地址。
#include <stdio.h>int main() {int num = 42;double pi = 3.1415926535;char ch = 'A';char str[] = "Hello, World!";printf("|%d|\n", num); // 十进制整数printf("|%x|\n", num); // 十六进制整数(小写)printf("|%f|\n", pi); // 浮点数printf("|%e|\n", pi); // 科学计数法printf("|%c|\n", ch); // 字符printf("|%s|\n", str); // 字符串printf("|%p|\n", &num); // 指针地址return 0;
}
输出:
|42|
|2a|
|3.141593|
|3.141593e+00|
|A|
|Hello, World!|
|0x7ffee4b5c8fc|
2.6 转义字符
转义字符用于表示特殊字符或控制输出格式。常见的转义字符包括:
-
\n
:换行。 -
\t
:制表符。 -
\\
:反斜杠。 -
\"
:双引号。 -
\'
:单引号。
#include <stdio.h>int main() {printf("Hello,\nWorld!\n"); // 换行printf("Column1\tColumn2\n"); // 制表符printf("This is a backslash: \\\n"); // 反斜杠printf("He said, \"Hello!\"\n"); // 双引号return 0;
}
输出:
Hello,
World!
Column1 Column2
This is a backslash: \
He said, "Hello!"
2.7 返回结果
printf()
函数返回成功输出的字符数。如果发生错误,则返回负值。
#include <stdio.h>int main() {int count = printf("Hello, World!\n");printf("Characters printed: %d\n", count);return 0;
}
输出:
Hello, World!
Characters printed: 14