“在C语言中进行格式化读写文件”按照字面意思通常大家都会理解为将读写文件进行格式化的操作,那么到底我们是不是真的将读写文件进行格式化的操作呢?下面课课家笔者就为大家简单介绍C语言中格式化读写文件的概念和具体的操作编写方法。
首先笔者先给大家介绍fscanf()和fprintf()函数的概念。fscanf()和fprintf()函数与前面使用的scanf()和printf()功能相似,它们都是格式化读写函数,具体的区别在于fscanf()和fprintf()的读写对象不是键盘和显示器而是磁盘文件。
fscanf()和fprintf()函数的原型为:
intfscanf(FILE*fp,char*format,...);
intfprintf(FILE*fp,char*format,...);
在这里fp为文件指针,format为格式控制字符串,...表示参数列表。与scanf()和printf()相比,它们仅仅多了一个fp参数。具体比如:
FILE*fp;
inti,j;
char*str,ch;
fscanf(fp,"%d%s",&i,str);
fprintf(fp,"%d%c",j,ch);
fprintf()返回成功写入的字符的个数,失败则返回负数。fscanf()返回参数列表中被成功赋值的参数个数。
下面笔者用fscanf和fprintf函数来完成对学生信息的读写,具体代码如下:
#include
#defineN2
structstu{
charname[10];
intnum;
intage;
floatscore;
}boya[N],boyb[N],*pa,*pb;
intmain(){
FILE*fp;
inti;
pa=boya;
pb=boyb;
if((fp=fopen("D:\\\\demo.txt","wt+"))==NULL){
printf("Cannotopenfile,pressanykeyexit!");
getch();
exit(1);
}
//从键盘读入数据,保存到boya
printf("Inputdata:\\n");
for(i=0;i
scanf("%s%d%d%f",pa->name,&pa->num,&pa->age,&pa->score);
}
pa=boya;
//将boya中的数据写入到文件
for(i=0;i
fprintf(fp,"%s%d%d%f\\n",pa->name,pa->num,pa->age,pa->score);
}
//重置文件指针
rewind(fp);
//从文件中读取数据,保存到boyb
for(i=0;i
fscanf(fp,"%s%d%d%f\\n",pb->name,&pb->num,&pb->age,&pb->score);
}
pb=boyb;
//将boyb中的数据输出到显示器
for(i=0;i
printf("%s%d%d%f\\n",pb->name,pb->num,pb->age,pb->score);
}
fclose(fp);
return0;
}
输出结果:
Inputdata:
Tom21590.5↙
Hua11499↙
Tom21590.500000
Hua11499.000000
此时我们打开D:\\\\demo.txt,可以发现文件的内容是可以阅读且格式比较清晰。我们通过用fprintf()和fscanf()函数,在读写配置文件、日志文件时会比较方便,不但程序能够识别,而且用户也可以看懂并手动修改。另外如果我们将fp设置为stdin,那么fscanf()函数将会从键盘读取数据,与scanf的作用相同;设置为stdout,那么fprintf()函数将会向显示器输出内容,与printf的作用相同。具体比如:
#include
intmain(){
inta,b,sum;
fprintf(stdout,"Inputtwonumbers:");
fscanf(stdin,"%d%d",&a,&b);
sum=a+b;
fprintf(stdout,"sum=%d\\n",sum);
return0;
}
输出结果:
Inputtwonumbers:1020↙
sum=30
本次利用C语言格式化读写文件的讲解到此暂告一段落,如果以后有什么内容继续进行补充或者修改的话,笔者会在此进行相关的内容补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充,最后希望本次的教程对大家学习C语言能够起到一定的帮助作用!