C++ 中的 printf()
函数用于将格式化的字符串写入标准输出 (stdout
)。它定义在 cstdio 头文件中。
示例
#include <cstdio>
int main() {
int age = 23;
// print a string literal
printf("My age is ");
// print an int variable
printf("%d", age);
return 0;
}
// Output: My age is 23
printf() 语法
printf()
的语法是
printf(const char* format, ...);
这里,
- format 是要写入标准输出的字符串
...
在上面的代码中表示你可以向printf()
传递多个参数。
printf() 参数
printf()
函数接受以下参数
- format - 指向要写入
stdout
的以 null 结尾的字符串 (C 字符串) 的指针。它包含字符以及可选的以%
开头的格式说明符。 - ... - 指定要打印数据的其他附加参数。它们按照格式说明符的顺序出现。
printf() 返回值
printf()
函数返回
- 成功时 - 写入的字符数
- 失败时 - 一个负值
printf() 原型
printf()
函数在 cstdio 头文件中定义的原型是
int printf(const char* format, ... );
示例 1: C++ printf()
#include <cstdio>
int main() {
int num = 5;
char my_name[] = "Lincoln";
// print string and int variable
printf("num = %d \n", num);
// print string and char array
printf("My name is %s", my_name);
return 0;
}
输出
num = 5 My name is Lincoln
在这个程序中,我们使用了 printf()
函数来打印整数 num 和 C 字符串 my_name。
printf("num = %d \n", num);
printf("My name is %s", my_name);
这里,
%d
在输出中被 num 变量替换\n
是一个转义序列字符,用于打印新行%s
被 my_name C 字符串替换。
格式说明符
printf()
的 format 参数可以包含以 %
开头的格式说明符。这些说明符将被后面格式字符串的相应变量值替换。
格式说明符包含以下部分
- 一个前导的
%
符号 - flags - 一个或多个修饰转换行为的标志 (可选)
-
: 将结果左对齐到字段内。默认是右对齐。+
: 结果的符号会附加到值的前面,即使是正值。- space: 如果没有符号,则在结果前面附加一个空格。
#
: 执行转换的替代形式。0
: 用于整数和浮点数。使用前导零填充数字而不是空格。
- width - 一个可选的
*
或整数值,用于指定最小字段宽度。 - precision - 一个可选字段,由
.
加上*
或整数或空值组成,用于指定精度。 - length - 一个可选的长度修饰符,用于指定参数的大小。
- specifier - 一个转换格式说明符。
printf() 格式说明符原型
printf()
的格式说明符的一般原型是
%[flags][width][.precision][length]specifier
常用格式说明符
下表列出了一些常用的格式说明符
格式说明符 | 描述 |
---|---|
% |
一个 % 后跟另一个 % 字符会在屏幕上打印 % |
c |
写入单个字符 |
s |
写入字符字符串 |
d 或 i |
将有符号整数转换为十进制表示 |
o |
将无符号整数转换为八进制表示 |
X 或 x |
将无符号整数转换为十六进制表示 |
u |
将无符号整数转换为十进制表示 |
F 或 f |
将浮点数转换为十进制表示 |
E 或 e |
将浮点数转换为十进制指数表示 |
A 或 a |
将浮点数转换为十六进制指数表示 |
G 或 g |
将浮点数转换为十进制或十进制指数表示 |
n |
- 返回到目前为止已写入的字符数 - 结果被写入到参数指向的值 - 参数必须是 signed int 的指针 |
p |
写入一个定义指针的实现定义的字符序列 |
示例 2: C++ printf() 的更多示例
#include <cstdio>
int main() {
char ch = 'a';
float a = 5.0, b = 3.0;
int num = 10;
// set precision to 3 decimal places
printf("%.3f / %.3f = %.3f \n", a, b, a / b);
// set width to 5 digits with *
printf("Setting width %*c \n", 5, ch);
// get octal value of an integer
printf("Octal equivalent of %d is %o", num, num);
return 0;
}
输出
5.000 / 3.000 = 1.667 Setting width a Octal equivalent of 10 is 12
在这个程序中,我们使用了三次 printf()
函数。
1. 在第一个 printf()
函数中:
%.3f
- 将float
变量的精度设置为 3 位小数。- 第一个
%.3f
被第二个参数 a 的值替换。 - 第二个
%.3f
被第三个参数 b 的值替换。 - 最后一个
%.3f
被第四个参数a / b
的值替换。
2. 在第二个 printf()
函数中:
%*c
- 打印 char 变量 ch (第三个参数),宽度未指定。- 宽度随后由第二个参数
5
指定。
3. 在第三个 printf()
函数中:
%d
- 以十进制数字系统打印int
变量 num 的值%o
- 以八进制数字系统打印int
变量 num 的值
此外,转义字符 \n
会打印一个新行。
另请阅读