c语言,从键盘上输入十个学生的有关数据,把它们转存到磁盘文件上。

存到记事本上只有姓名和地址是对的,学号和年龄都出错了,这是为什么?

#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct Student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE];
void save()
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("can't open the file\n");
exit(0);
}
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i],sizeof(struct Student_type),1,fp)!=1)
printf("file write error");
fclose(fp);
}
int main()
{
int i;
printf("Please enter data of students:\n");
for(i=0;i<SIZE;i++)
{
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
}
return 0;
}

fwrite 是以二进制形式存进文件中,
记事本文件本身存的都是ASCII码,打开看时,把数据用对应的字符显示出来。

name 和 addr 本身是字符串,所以存起来可以看到正常的显示,因为字符串的实际值是其ASCII码,
另两个不是字符串,存是的数据本身,这么真接用记事本打开看是不行的。比如19,你存进去的就是19,显示时 ASCII码19对应的就是个乱码。
你得用 fprintf(fp,"%d",stud[i].age);来存

当然,如果只是把数据存入文件中为以后读取,而不是直接打开文件来看的话,这么存是OK 的,当成一个数据库。
读取时,用 fread就可以读出来。
温馨提示:答案为网友推荐,仅供参考
相似回答