C语言,第二个自定义函数中while循环是如何结束的,同时在第二个函数中用第一个函数有什么作用?


void* myInsert(SUB *subj)  //链表插入操作  
{
    SUB *ptr,*ptr2;
    ptr=subj;//要传入的节点
     if(head==NULL)//头节点为空,说明链表为空链表
     {
         head=ptr;//将头节点设置为要传入的节点
         head->next=NULL;//指针域设为空
     }
     else//链表不为空
     {
         for(ptr2=head;ptr2;ptr2=ptr2->next)//从链表头开始找,找到目前最后一个节点
        {        
            if(ptr2->next==NULL)//若当前ptr2是链表最后一个节点
             {
                 ptr2->next=subj;//在链表尾增加一个节点subj
                 subj->next=NULL;//将新节点的指针域置为空结束链表
                 break;
             }
         }
     }
    return head;
}


void readfile()                    //阅读文件 
{
    void *myInsert(SUB*);
    SUB *newSub;     //新课程
    int num,stime,ttime,etime;
    int score,term;
    char c,name[20],kind[10],fname[20];
    FILE *fp;     //声明fp是指针,用来指向FILE类型的对象,fp是指向文件结构体的指针变
    fp=fopen("2-2.txt","r");
    while(!feof(fp))//文件没有结束
    {
        newSub=(SUB*)malloc(sizeof(SUB));
        fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,
                                       &newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);
        myInsert(newSub);
    }
    fclose(fp);
}

36行的while当读取到文件尾的时候就循环结束了
第二个函数是从文件中读取出数据形成链表节点,然后用第一个函数将新的链表节点加入到链表尾部

1、第二个自定义函数中while循环是如何结束的
读文件,文件结束feof(fp)为false,程序退出;
2、在第二个函数中用第一个函数有什么作用?
myIsert函数是链表的尾插,将文件读取到链表中保存

第二个函数的while,feof(fp)是判断文件是否读到结尾,如果文件读到结尾了,循环就结束了。
第二个函数读取文件并将文件按行读取成成指定的数据结构,再调用第一个函数将数据插入到链表的尾部。

1.feof(fp)用于判断文件是否读到的是EOF,它只判断,并不真正读取,取反之后就代表文件没有到达结尾
2.fscanf读取文件并保存在newSub中, myInsert(newSub)将它插入链表