C语言中想用feof()作为判断条件,用fread()来读入链表数据,如何避免将最后多读入一行无用的数据?
难道fread()和feof()就不能结合起来使用了么?再详细描述一下问题:我以链表形式写数据,然后用fwrite()函数将链表数据写入了文本文件“data.txt”中。...
难道fread()和feof()就不能结合起来使用了么?
再详细描述一下问题:我以链表形式写数据,然后用fwrite()函数将链表数据写入了文本文件“data.txt”中。
问题1:当我在将数据写入"data.txt"后,不关闭程序,直接选择读出文件到链表中(选项9),会出现这样的问题:写入文件的数据是 : 烧结矿 27271 31 28 19 上大课 37262 36 29 71 分别是两个结构体,写入应该没有错,但在该文件读出数据并重新存放到链表时候,再打印链表数据,就成这样了。
问题2:我在将链表数据写入文件后就关闭程序。 当我再一次打开程序,我希望将"data.txt"中的数据读回到链表中去,但读入会多出一行无关数据(乱码),如图:
请熟悉这方面问题的高人帮我解答一下。如果有可替代的解决方法也可以的,谢谢了!具体问题和代码,请大家在百度上发消息给我或者qq上加我:1309604898,我都会附上更详细代码,谢谢了!只要解决了我的问题,必定给100财富。我自己也在找原因,但时间有点紧,所以求助大家,谢谢了
void Print(struct student *head) //修改一下界面!
{
// printf("姓名 学号 语文 数学 外语\n");
int j;
struct student *p = head;
while(p != NULL)
{
printf("%-10s%8ld",p->name,p->num);
for(j=0; j<S; j++)
printf("%6d",p->score[j]);
puts("");
p = p->next;
}
}
int WriteFile(struct student *head)
{
FILE *fp;
struct student *p = head;
if((fp = fopen("data.txt","w")) == NULL)
{
printf("打开文件出错\n");
return 0;
}
while(p != NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p = p->next;
}
printf("文件写入成功!\n");
fclose(fp);
return 1;
}
int ReadFile(struct student *head)
{
FILE *fp;
struct student *p;
struct student *pr = head;
if((fp = fopen("data.txt","r")) == NULL)
{
printf("文件打开失败\n");
return 0;
}
p = (struct student *)malloc(sizeof(struct student));
fread(p,sizeof(struct student),1,fp);
head = p; pr = p;
while(!feof(fp))
{
p = (struct student *)malloc(sizeof(struct student));
fread(p,sizeof(struct student),1,fp);
pr->next = p;
pr = p;
}
p = NULL;
printf("文件读入成功,数据如下:\n");
Print(head);
fclose(fp);
} 展开
再详细描述一下问题:我以链表形式写数据,然后用fwrite()函数将链表数据写入了文本文件“data.txt”中。
问题1:当我在将数据写入"data.txt"后,不关闭程序,直接选择读出文件到链表中(选项9),会出现这样的问题:写入文件的数据是 : 烧结矿 27271 31 28 19 上大课 37262 36 29 71 分别是两个结构体,写入应该没有错,但在该文件读出数据并重新存放到链表时候,再打印链表数据,就成这样了。
问题2:我在将链表数据写入文件后就关闭程序。 当我再一次打开程序,我希望将"data.txt"中的数据读回到链表中去,但读入会多出一行无关数据(乱码),如图:
请熟悉这方面问题的高人帮我解答一下。如果有可替代的解决方法也可以的,谢谢了!具体问题和代码,请大家在百度上发消息给我或者qq上加我:1309604898,我都会附上更详细代码,谢谢了!只要解决了我的问题,必定给100财富。我自己也在找原因,但时间有点紧,所以求助大家,谢谢了
void Print(struct student *head) //修改一下界面!
{
// printf("姓名 学号 语文 数学 外语\n");
int j;
struct student *p = head;
while(p != NULL)
{
printf("%-10s%8ld",p->name,p->num);
for(j=0; j<S; j++)
printf("%6d",p->score[j]);
puts("");
p = p->next;
}
}
int WriteFile(struct student *head)
{
FILE *fp;
struct student *p = head;
if((fp = fopen("data.txt","w")) == NULL)
{
printf("打开文件出错\n");
return 0;
}
while(p != NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p = p->next;
}
printf("文件写入成功!\n");
fclose(fp);
return 1;
}
int ReadFile(struct student *head)
{
FILE *fp;
struct student *p;
struct student *pr = head;
if((fp = fopen("data.txt","r")) == NULL)
{
printf("文件打开失败\n");
return 0;
}
p = (struct student *)malloc(sizeof(struct student));
fread(p,sizeof(struct student),1,fp);
head = p; pr = p;
while(!feof(fp))
{
p = (struct student *)malloc(sizeof(struct student));
fread(p,sizeof(struct student),1,fp);
pr->next = p;
pr = p;
}
p = NULL;
printf("文件读入成功,数据如下:\n");
Print(head);
fclose(fp);
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询