【C语法学习】fprintf()函数

1 函数原型

fprintf():将格式化输出发送至指定流stream,stream可以是创建的文件流,也可以是C语言标准输出流stdout,函数原型如下:

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

2 参数

fprintf()函数参数包括两部分:

  1. FILE *stream:指向FILE结构类型的指针,该指针是fopen()函数返回值;
  2. const char *format,…:与printf()函数的参数完全相同。

3 返回值

fprintf()函数返回值类型为int型:

  1. 写文件成功,则返回写入的总字符数;
  2. 写文件失败,则返回负值。

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()函数的工作原理类似,差异如下:

  1. fprintf()函数将输出发送至指定流stream中;
  2. printf()函数将输出发送至标准输出流stdout中;
  3. 将fprintf()函数的参数stream指定为stdout,则fprintf()函数的功能和printf()函数的功能完全相同。

5 示例

示例代码如下图所示:

void clear_stdin (void) 
{
   int c;
   while ((c = getchar()) != '\n' && c != EOF)
   {
      ;
   }
}

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

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

   printf("\n");

   return 0;
}

代码运行结果如下图所示:
在这里插入图片描述

文件内容如下图所示:

在这里插入图片描述

比较总结:文件内容和标准输出内容一致,符合" 将fprintf()函数的参数stream指定为stdout,则fprintf()函数的功能和printf()函数的功能完全相同"的说法。

注意事项

  1. scanf()函数在使用完之后需要清空标准输入流stdin缓冲区,否则会导致后续使用gets()函数获取文件名时发生错误;
  2. gets()函数在使用完之后无需清空标准输入流stdin缓冲区。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值