具体的原因是因为fscanf/fprintf函数创建的是文本文件,可以用编译器直接打开,而后者创建的是二进制文件,打开后会出现乱码的情况。
两种函数的具体实现方式我都会给大家介绍
⭐函数中涉及到的文件地址就是我们所要进行 *** 作的文件,复制文件地址时会有‘‘转义符号编译器会报错,我们可以用两个’'或者用’/'符号代替就可以了。
用我自己的文件举个栗子:
“D:\Stephen_Curry__.txt”
这个文件地址我们只需要修改成
"D:\Stephen_Curry__.txt"或者"D:/Stephen_Curry__.txt"就可以正常运行了。
⭐
代码如下:第一种用fscanf/fprintf函数实现
//创建的是文本文件
#include
#include
int n;
struct student
{
char name[100];
char eng[20];
int english;
int math;
int sum;
}stu[100],*qq,*pp;
int main()
{
FILE *fp;
qq=stu;
if((fp=fopen("文件地址","wb+"))==NULL)
{
printf("Cannot open file,strike any key exit!");
exit(1);
}
printf("intput student number:\n");
scanf("%d",&n);
printf("input data\n");
//从键盘输入学生数据存入数组
for(int i=0;i<n;i++,qq++)
{
scanf("%s%s%d%d",qq->name,qq->eng,&qq->english,&qq->math);
qq->sum=qq->english+qq->math;
}
qq=stu;
pp=stu;
//把数组中学生数据粗存入文件
for(int i=0;i<n;i++,qq++)
fprintf(fp,"%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
//把文件指针重新定位到文件头
rewind(fp);
//从文件中读取学生数据到数组
for(int i=0;i<n;i++,pp++)
fscanf(fp,"%s%s%d%d%d",pp->name,pp->eng,&pp->english,&pp->math,&pp->sum);
printf("\n\nname\tnumber english math sum\n");
qq=stu;
for(int i=0;i<n;i++,qq++)
printf("%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
fclose(fp);
return 0;
}
第二种用fwrite/fread函数实现
//创建的是二进制文件
#include
#include
int n;
struct student
{
char name[100];
char eng[20];
int english;
int math;
int sum;
}stu[10],*qq,*pp;
int main()
{
FILE *fp;
qq=stu;
if((fp=fopen("文件地址","wb+"))==NULL)
{
printf("Cannot open file,strike any key exit!");
exit(1);
}
printf("intput studen number:\n");
scanf("%d",&n);
printf("input data\n");
//从键盘输入两个学生数据存入数组
for(int i=0;i<n;i++,qq++)
{
scanf("%s%s%d%d",qq->name,qq->eng,&qq->english,&qq->math);
qq->sum=qq->english+qq->math;
}
qq=stu;
pp=stu;
//把数组中学生数据写入文件
fwrite(pp,sizeof(struct student),n,fp);
//把文件指针重新定位到文件头
rewind(fp);
//从文件中读取学生数据到数组
fread(qq,sizeof(struct student),n,fp);
printf("\n\nname\tnumber english math sum\n");
for(int i=0;i<n;i++,qq++)
printf("%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
fclose;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)