急,急,急........

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:11:05
不知为什么,每进行一次操作就多出一个节点来,有人发现问题么
关于文件部分的函数
void save(struct student *head)
{
FILE *fp;
struct student *p1;
p1=head->next;
fp=fopen("student_list","w");
fseek(fp,0L,0);
while(p1!=NULL)
{
fwrite(p1,sizeof(struct student),1,fp);
printf("储存了%d个数据\n",number--);
p1=p1->next;
}
fclose(fp);
}
struct student *load(void)
{
FILE *fp;
struct student *p1,*head,*p2;
head=p2=(struct student*)malloc(sizeof(struct student));
if(!(fp=fopen("student_list","r")))
{
fp=fopen("student_list","w");
fclose(fp);
fp=fopen("student_list","r");
}
if(!feof(fp))
printf("没有到文件结尾\n");
wh

1,文件打开方式用r+b,w+b

2,fread读成功后再 number++;

应该是feof的使用有问题.初学者经常会发现明明已经读完文件了,读文件的循环又执行了一次操作.这是因为feof是当读到文件结束符才返回 true 值,而非到文件最后一个字符.

可以用如下方法
p1=(struct student*)malloc(sizeof(struct student));
while(fread(p1,sizeof(struct student),1,fp)==1)
{
p2->next=p1;
p2=p2->next;
p1=(struct student*)malloc(sizeof(struct student));
}