#define MES (struct studentMessage *)malloc(sizeof(struct studentMessage));
//定义结构体
typedef struct studentMessage{
char name[15]; //姓名
int id; //学号
char sex[7]; //性别
char collage[20]; //学院
int Class; //班级
struct studentMessage *next; //链表指针
}MESSAGE;
void savefilestu(MESSAGE *head)
{
int i;
FILE *fp=NULL;
char q[20];
MESSAGE *p;
printf("请输入您要保存的文件名:");
scanf("%s",q);
fp=fopen(q,"w");
p=head;
for(;p;p=p->next) fwrite(p,sizeof(struct studentMessage),1,fp);
fclose(fp);
fp=fopen(q,"r");
p=MES;
p->next=NULL;
for(;!feof(fp);)
{
fread(p,sizeof(struct studentMessage),1,fp);
outputstu(p);
}
fclose(fp);
printf("已将信息保存到%s文件中!\n",q);
printf("按任意键返回\n");
getch();
}
经过测试,每次fwrite都多写一个数据(数值跟最后一个一样)但是在这个函数读取文件没问题,在其他地方读取文件时前面的正常,多写那个是乱码。求解决方法。。。。
在这个函数里fread会读出多余的那个数据,数值跟最后一个一样。在其他地方里读出来的结果是前面正常最后多余那个为乱码。曾经设定fwrite的循环只进行一次,结果还是写了两个。如果在for里fwrite语句后直接加break,只写一个数据,为乱码。。。。
回二楼,改为wb,rb失败。其他方面我确定没问题因为这是个模拟信息管理系统,之前其他函数使用链表一直没错
白衣染霜花
30秒到达战场