用Visual C++练习C语言保存数据文件,为什么用记事本打开此文件,其中的整数都是乱码?

用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;}

记事本只能显示字符串,你的结构体中的num和age两个值,是被显示为乱码的。因为他们是int型数值,而不是字符串。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-28
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct 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","rt+"))==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环境直接打开,并编辑。。 用文本打开必然乱。

本回答被提问者和网友采纳
第2个回答  2012-07-31
你存入的是二进制数据,用记事本打开自然是乱码,要想打开是正常,得存入的是字符串!
第3个回答  2012-07-31
你这里好象只是读文件,不是写文件。
第4个回答  2012-08-03
用C++的读写方式吧, fstream
相似回答