跳到主要内容

C++ fprintf() 格式化输出到文件

fprintf() 原型

int fprintf(FILE* stream, const char* format, ...);

fprintf() 函数将由 format 指向的字符串写入流 stream。字符串 format 可能包含以 % 开始的格式说明符,这些格式说明符被传递给 fprintf() 函数作为额外参数的变量值替换。

它定义在 <cstdio> 头文件中。

fprintf() 参数

  • stream:指向输出文件流的指针,内容将写入该流。

  • format:指向以空字符结尾的字符串的指针,该字符串被写入文件流。它由字符组成,包括可选的以 % 开始的格式说明符。 格式说明符由相应变量的值替换,这些变量紧随格式字符串之后。 格式说明符包括以下部分:

  • 前导的 % 符号

  • Flags:可选的一个或多个标志,修改转换行为。

    • -:在字段内左对齐结果。默认为右对齐。
    • +:结果的符号附加在值的开头,即使是正结果。
    • 空格:如果没有符号,结果的开头附加一个空格。
    • #:执行转换的替代形式。
    • 0:用于整数和浮点数。使用前导零而不是空格填充数字。

Width:可选的下划线或整数值,用于指定最小宽度字段。 Precision:可选字段,由 . 后跟下划线或整数或不指定,用于指定精度。 Length:可选长度修饰符,指定参数的大小。 Specifier:转换格式说明符。可用的格式说明符如下:

格式说明符描述
%打印 %
c写入单个字符
s写入字符字符串
d 或 i将有符号整数转换为十进制表示
o将无符号整数转换为八进制表示
X 或 x将无符号整数转换为十六进制表示
u将无符号整数转换为十进制表示
F 或 f将浮点数转换为十进制表示
E 或 e将浮点数转换为十进制指数记法
A 或 a将浮点数转换为十六进制指数记法
G 或 g将浮点数转换为十进制或十进制指数记法
n返回此次函数调用到目前为止写入的字符数。结果写入参数指向的值中
p写入实现定义的字符序列,定义一个指针。

因此,格式说明符的一般格式为:%[flags][width][.precision][length]specifier

: 其他额外参数,指定要打印的数据。它们按照格式说明符的顺序出现。

fprintf() 返回值

成功时,fprintf() 函数返回写入的字符数。失败时返回负值。

示例:fprintf() 函数如何工作

#include <cstdio>

int main()
{
FILE *fp;
fp = fopen("example.txt", "w");
char lang[5][20] = {"C", "C++", "Java", "Python", "PHP"};

fprintf(fp, "前 5 种编程语言\n");
for (int i = 0; i < 5; i++)
fprintf(fp, "%d. %s\n", i + 1, lang[i]);

fclose(fp);
return 0;
}

当你运行程序时,将创建一个名为 "example.txt" 的文件(如果尚不存在),其中包含以下字符串:

5 种编程语言
1. C
2. C++
3.

Java
4. Python
5. PHP