求帮忙看看这段C语言代码什么意思,关于从文件读取数据到链表的

求帮忙看看这段C语言代码什么意思,关于从文件读取数据到链表的struct Student *createlist(){
struct Student *head,*p1,*p2;
struct Student temp;
p1=(struct Student * )malloc(LEN);
int i=1;
FILE *fp;
if ((fp=fopen ("shuju1.dat","rb"))==NULL){
printf("不能打开文件\n");
return;
}
while(fread(&temp,LEN,1,fp)!=0){
if (i==1) head=p1;
else p2->next=p1;
p2=p1;
p1->num=temp.num;
strcpy(p1->name,temp.name);
p1->yuwen=temp.yuwen;
p1->shuxue=temp.shuxue;
p1->yingyu=temp.yingyu;
p1=(struct Student * )malloc(LEN);
i=i+1;
}
p2->next=NULL;
fclose(fp);
return (head);
}

#include <stdio.h>

struct Student *createlist() {
struct Student *head,*p1,*p2;
struct Student temp;
p1 = (struct Student * )malloc(LEN);//申请动态空间
int i = 1;
FILE *fp;
if((fp = fopen ("shuju1.dat","rb")) == NULL) {
printf("不能打开文件\n");
return;
}
while(fread(&temp,LEN,1,fp) != 0) {//fread()函数的返回值是读取文件得到的字节数,如果返回0值说明已经读到文件尾部了。
if(i == 1) head = p1;//head指向的是链表的第一个结点
else p2->next = p1;//这里会有问题,当第一次进入循环时,p2还没有志向实际的结点,所以也不会有p2->next。
p2 = p1;
p1->num = temp.num;//读得的数据放置到链表节点的数据域,下同
strcpy(p1->name,temp.name);
p1->yuwen = temp.yuwen;
p1->shuxue = temp.shuxue;
p1->yingyu = temp.yingyu;
p1 = (struct Student * )malloc(LEN);//申请下一个结点的动态空间,本语句放这儿并不好,因为最后申请的空间将闲置。
i = i + 1;
}
p2->next = NULL;
fclose(fp);
return (head);
}

追问

麻烦您讲讲else p2—>next那个怎么改改

追答#include <stdio.h>
 
struct Student *createlist() {
    struct Student *head,*p;
    struct Student temp;
    p = head = (struct Student *)malloc(LEN);
    int i = 1;
    FILE *fp;
    if((fp = fopen ("shuju1.dat","rb")) == NULL) {
        printf("不能打开文件\n");
        return NULL;
    }
    while(!feof((fp)) {
        p->next = (struct Student *)malloc(LEN);
        p->next->num = temp.num;
        strcpy(p->next->name,temp.name);
        p->next->yuwen = temp.yuwen;
        p->next->shuxue = temp.shuxue;
        p->next->yingyu = temp.yingyu;
p = p->next;
        i = i + 1;
    }
    p->next = NULL;
    fclose(fp);
    return (head);
}

追问

呃呃,改成这样运行不了了。。。

温馨提示:答案为网友推荐,仅供参考
相似回答