用Visual C++练习C语言,作“文件”部分的练习,将输入的数据保存为文件后,用记事本打开此文件,其中的整数都是乱码(见附图。可用windows带的画图软件查看)。而如果用程序打开此文件,在电脑屏幕上显示,结果正常。这是为什么?用什么办法可以解决?附C程序:
#include<stdio.h>#include<stdlib.h>#define SIZE 10struct Student_type{ char name[10]; int num; int age; char addr[15];}stud[SIZE];
int main(){ FILE *fp; int i,k; if((fp=fopen("stu.dat","rb"))==NULL) { printf("cannot open file\n"); exit(0); } for(i=0;i<SIZE;i+=2) { k=fseek(fp,i*sizeof(struct Student_type),0); fread(&stud[i],sizeof(struct Student_type),1,fp); printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr); } fclose(fp); return 0;}
我这里附的程序有点问题,我用了一个读出文件的程序而不是写入文件的程序。但我试过了,"rb"和"wb"是读和写一个二进制文件,"r"和"w"是读和写一个文本文件,都不行。文件中的整数都是乱码。
追答问题出在这里:
fread(&stud[i],sizeof(struct Student_type),1,fp);
按结构读取,打开的文件也必须是按结构写的,用fwrite()写的。
为了调试::你可以先用fwrite写1个文件,然后读取。
这个程序是读的程序。搞错了。我写的程序有的,就是用fwrite写的,问题就是写了以后直接用记事本打开stu.dat文件,其中的整数是乱码。而在程序中用fread读出,是正常的。这种情况是正常的吗?本想把程序附上,字数太多了,就不附了。
追答这就对了。非常正常。
二进制文件用VC环境直接打开,并编辑。。 用文本打开必然乱。