文章目录
- 1 函数原型
- 2 参数
- 3 返回值
- 4 比较
- 5 示例
1 函数原型
fprintf():将格式化输出发送至指定流stream,函数原型如下:
int fprintf(FILE *stream, const char *format, ...)
2 参数
fprintf()函数参数包括三部分:
- 参数stream是一个指向FILE类型结构的指针;stream指定了fprintf()函数要写入的流,可以是文件流,也可以是标准输出流;当是文件流时,stream等于fopen()函数的返回值;当是标准输出流时,stream等于stdout;
- format :格式字符串,和printf()函数一致;
- … :参数列表,和printf()函数一致。
3 返回值
fprintf()函数的返回值类型为int型:
- 写文件成功,则返回写入的总字符数;
- 写文件失败,则返回负值。
C语言标准描述如下:
1. fprintf returns the number of bytes written. fwprintf returns the number of wide characters written.
2. Each of these functions returns a negative value instead when an output error occurs.
4 比较
fprintf()函数和printf()函数的工作原理类似,差异如下:
- fprintf()函数将输出发送至指定流stream中;
- printf()函数将输出发送至标准输出流stdout中;
- 将fprintf()函数的参数stream指定为stdout,则fprintf()函数的功能和printf()函数的功能完全相同。
5 示例
使用fprintf()函数同时写文件和送显屏幕,示例代码如下所示:
void clear_stdin(void)
{while (getchar() != '\n');
}int main()
{FILE* fp = NULL;char filename[20] = { 0 };float data[5] = { 0 };int count = 0;printf("Enter 5 floating-point numerical values:>\n");for (count = 0; count < 5; count++){scanf("%f", &data[count]);}clear_stdin();printf("\n");printf("Enter a filename:>\n");gets(filename);if ((fp = fopen(filename, "w")) == NULL){printf("Failed to open file %s\n", filename);exit(1);}printf("\nPrint 5 floating-point numerical values:>\n");for (count = 0; count < 5; count++){fprintf(fp, "data[%d] = %f\n", count, data[count]);fprintf(stdout, "data[%d] = %f\n", count, data[count]);}fclose(fp);return 0;
}
代码运行结果如下图所示:
文件内容如下图所示:
比较总结:文件内容和标准输出内容一致,符合" 将fprintf()函数的参数stream指定为stdout,则fprintf()函数的功能和printf()函数的功能完全相同"的说法。
注意事项:
- scanf()函数在使用完之后需要清空标准输入流stdin缓冲区,否则会导致后续使用gets()函数获取文件名时发生错误;
- gets()函数在使用完之后无需清空标准输入流stdin缓冲区。