c语言怎么把结构体数组写入txt文件
我写的一个程序把数据输入到txt文件中,结果打开该txt发现是乱码,怎么解决?if((fp1=fopen("student.txt","wb"))==NULL){prin...
我写的一个程序把数据输入到txt文件中,结果打开该txt发现是乱码,怎么解决?
if((fp1=fopen("student.txt","wb"))==NULL)
{printf("cannot open this file\n");
exit(0);
}
printf("No Name Eng point Math point Phy point\n");
for(i=0;i<N;i++)
{scanf("%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,&student[i].eng,&student[i].point1,
&student[i].math,&student[i].point2,&student[i].phy,&student[i].point3);
student[i].ave=(student[i].eng+student[i].math+student[i].phy)/3.0;
fwrite(&student[i],sizeof(struct st),1,fp1);
} 展开
if((fp1=fopen("student.txt","wb"))==NULL)
{printf("cannot open this file\n");
exit(0);
}
printf("No Name Eng point Math point Phy point\n");
for(i=0;i<N;i++)
{scanf("%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,&student[i].eng,&student[i].point1,
&student[i].math,&student[i].point2,&student[i].phy,&student[i].point3);
student[i].ave=(student[i].eng+student[i].math+student[i].phy)/3.0;
fwrite(&student[i],sizeof(struct st),1,fp1);
} 展开
2个回答
展开全部
fopen("student.txt","wb")
b就是二进制的意思。你用二进制形式将student.txt打开
而fwrite也是将内存中的数据不经转换直接写入文件,所以文件中保存的是二进制形式,当然看到乱码了。
你试试:
if((fp1=fopen("student.txt","w"))==NULL)
{printf("cannot open this file\n");
exit(0);
}
printf("No Name Eng point Math point Phy point\n");
for(i=0;i<N;i++)
{scanf("%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,&student[i].eng,&student[i].point1,
&student[i].math,&student[i].point2,&student[i].phy,&student[i].point3);
student[i].ave=(student[i].eng+student[i].math+student[i].phy)/3.0;
fprintf(fp1,"%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,student[i].eng,student[i].point1,
student[i].math,student[i].point2,student[i].phy,student[i].point3);
}
就是用fprintf函数写入文件,你试试看吧。
b就是二进制的意思。你用二进制形式将student.txt打开
而fwrite也是将内存中的数据不经转换直接写入文件,所以文件中保存的是二进制形式,当然看到乱码了。
你试试:
if((fp1=fopen("student.txt","w"))==NULL)
{printf("cannot open this file\n");
exit(0);
}
printf("No Name Eng point Math point Phy point\n");
for(i=0;i<N;i++)
{scanf("%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,&student[i].eng,&student[i].point1,
&student[i].math,&student[i].point2,&student[i].phy,&student[i].point3);
student[i].ave=(student[i].eng+student[i].math+student[i].phy)/3.0;
fprintf(fp1,"%s,%s,%d,%f,%d,%f,%d,%f",student[i].no,student[i].name,student[i].eng,student[i].point1,
student[i].math,student[i].point2,student[i].phy,student[i].point3);
}
就是用fprintf函数写入文件,你试试看吧。
展开全部
1、最好用2进制方法打开文件,用fwrite 写文件。读时也用用2进制方法打开文件,用fread读.这样,写的时候按整个结构写,读也按整个结构读,字符串有空白也没关系。
2、例程:
FILE *fp;
fp=fopen("my.dat","wb");
fwrite(&stu,sizeof(stu),1,fp); // 写1个结构
for (i=0;i<10;i++) fwrite(&student[i],sizeof(student),1,fp); // 写10个结构
fclose(fp);
fp=fopen("my.dat","rb");
fread(&stu,sizeof(stu),1,fp); // 读1个结构
for (i=0;i<10;i++) fread(&student[i],sizeof(student),1,fp); // 读 10个结构
fclose(fp);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询