C语言:fscanf函数与fprintf函数——格式化读写函数

函数fscanf和函数sprintf是格式化读写文件函数,其功能与我们经常使用的scanf函数与printf函数类似。

两者区别:scanf函数和printf函数的读写对象分别是键盘和显示器;

                  fscanf函数和fprintf函数的读写对象是磁盘文件;

1.函数fscanf的原型:int fscanf(FILE*stream,char*format,...);

2.函数scanf的原型:int scanf(char*format,...);

(两者相差一个参数stream,对函数fscanf来说,其功能是要从文件stream中读取格式化数据到变量中。

如:调用fscanf函数,从文件中读取两个float型数据的代码如下:

fscanf(fp,"%f,%f",&a,&b);

它表示从fp指向的文件中读取两个实数到变量a和b中。

3.格式化读写函数举例

某市一个路段在某时刻交叉口的车流量如下:

 

车型路段1路段2
car231109
bus2912
bike450239

编写程序,先将车流量写入文件test.txt,然后从文件中读出数据并计算分流量。

【分析】在交叉口处,分流量=路段1的车流量-路段2的车流量。

程序实现代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
void readdata();
void writedata();
void main()
{
 writedata();
 readdata();
}
void writedata()                                                                       /*写数据到文件test.txt中*/
{
 FILE *fp;
 int r1,r2;
 char vehicle[12];
 if((fp=fopen("test.txt","w"))==NULL)                                      /*以写的方式打开文件test.txt*/
 {
  printf("打开文件失败.\n");
  exit(-1);
 }
 printf("车型:");
 gets(vehicle);                                                                        /*输入车型*/
 while(strlen(vehicle)>0)
 {
  printf("路段1的车流量:");
  scanf("%d",&r1);                                                                 /*输入路段1的车流量*/
  printf("路段2的车流量:");
  scanf("%d%*c",&r2);                                                           /*输入路段2的车流量*/
  fprintf(fp,"%s%d%d",vehicle,r1,r2);
  printf("车型:");
  gets(vehicle);                                                                      /*输入车型*/
 }
 fclose(fp);                                                                             /*关闭文件*/
}
void readdata()
/*从文件test.txt中读取数据*/
{
 FILE *fp;
 int r1,r2;
 char vehicle[12];
 if((fp=fopen("test.txt","r"))==NULL)/*以写的方式打开文件*/
 {
  printf("打开文件失败.\n");
  exit(-1);
 }
 printf("车型  路段1  路段2  分流\n");
 while(!feof(fp))
 {
  fprintf(fp,"%s%d%d",vehicle,r1,r2);                                     /*读取文件中的数据到变量中*/
  printf("%4s%5d%5d%5d",vehicle,r1,r2,abs(r1-r2));            /*输出车型,车流量和分流量*/
 }
 fclose(fp);                                                                             /*关闭文件*/
}

运行结果如下:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

濯一一

你的鼓励:我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值