函数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路段2car231109bus2912bike450239
编写程序,先将车流量写入文件test.txt,然后从文件中读出数据并计算分流量。
【分析】在交叉口处,分流量=路段1的车流量-路段2的车流量。
程序实现代码如下:
#include #include #include 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); /*关闭文件*/ }
运行结果如下: