![]() |
#2
吹水佬2020-05-29 09:22
没有具体数据,模拟一下。
#include <stdio.h> #include <stdlib.h> struct StuLink { char xm[10]; int xb; int cj; struct StuLink* next; }; struct StuLink* ReadFromFile(char *fileName) { FILE *fp = fopen(fileName,"r"); if (fp == NULL) return NULL; struct StuLink st; struct StuLink* head = NULL; struct StuLink **p = &head; while (fscanf(fp,"%s %d %d",st.xm,&st.xb,&st.cj) == 3) { *p = (struct StuLink*)malloc(sizeof(struct StuLink)); if (*p == NULL) break; *(*p) = st; (*p)->next = NULL; p = &((*p)->next); } fclose(fp); return head; } int SaveToFile(struct StuLink* p, char* filename) { FILE* fp=fopen(filename,"w"); if (fp==NULL) return 0; for (; p; p=p->next) fprintf(fp, "%s %d %d\n", p->xm,p->xb,p->cj); fclose(fp); return 1; } void PrintList(struct StuLink* p) { for (; p; p=p->next) printf("%s %d %d\n", p->xm,p->xb,p->cj); } void Free(struct StuLink* head) { struct StuLink* p=head; while (p) { head = p->next; free(p); p = head; } } int main(void) { struct StuLink st[3]={{"aaa",1,11,&st[1]},{"bbb",0,22,&st[2]},{"ccc",1,33,NULL}}; SaveToFile(&st[0], "test.txt"); struct StuLink* head = ReadFromFile("test.txt"); PrintList(head); Free(head); return 0; } [此贴子已经被作者于2020-5-29 09:25编辑过] |
只有本站会员才能查看附件,请 登录
(源代码)以下是发现出问题的部分
void ReadFromFile(char *fileName,struct StuLink * head) //从数据文件中逐行读取学生信息生成学生链表
{
int i=1;
FILE *fp;
struct StuLink *p1,*p2=NULL;
//文件指针变量fp
if((fp=fopen(fileName,"r"))==NULL)
{
printf("不能打开该文件!\n");
exit(0);
}
if((p1=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
{
printf("不能成功分配内存储块!");
exit(0);
}
p1->next =NULL;
while((fscanf(fp,"%s %d %d",p1->xm,p1->xb,p1->cj))!=EOF )
{
p1->xh=i;
if(i==1)head=p1;
else p2->next=p1;
p2=p1;
if((p1=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
{
printf("不能成功分配内存储块!");
exit(0);
}
p1->next =NULL;
i++;
}
printf("成功生成链表!");
}
不明白为什么在把文件里的内容放到链表里的时候会出现问题,循环只能进行一边,请大家指教!
目前调试初期 如果大佬发现源代码中其他问题,望得到指点可以改正