C语言,请高手指点一下。

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:40:55
我编的一个小程序:输入学生的信息,存到制定的文件里。可是存进去的东西有乱码,怎么回事啊?怎么改?我的:
#include<stdio.h>
struct student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[4];

void save()
{
FILE *fp;
int i,j;
if((fp = fopen("e:/c/zhang.txt","w+")) == NULL)
{
printf("cannot open file.\n");
return;
}
for(i = 0;i<4;i++)
{
fwrite(&stud[i],sizeof(struct student_type),1,fp);
fputc('\n',fp);
}
for(i = 0;i<4;i++)
{
fread(&stud[i],sizeof(struct student_type),1,fp);
printf("%-10s%4d%4d%-15s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
printf("\n");
}
fclose(fp);
}
main()
{
int i;
for(i = 0;i<4;i++)
{
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
}
save();
}

for(i = 0;i<4;i++)
{
fwrite(&stud[i],sizeof(struct student_type),1,fp);
fputc('\n',fp);
}
for(i = 0;i<4;i++)
{
fread(&stud[i],sizeof(struct student_type),1,fp);
printf("%-10s%4d%4d%-15s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
printf("\n");
}

你这两个操作之间没有rewind(fp),那fwriter 之后文件指针己指向结尾,你再fread,不是从头开始读入的.你在两个中间加入一句rewind(fp),就好了.

有乱码正常啊,num,age都是int型,本来就不是ASCII码文本.