c文件读入到链表时,编译通过却一直在运行

今日在练习文件录入到链表的时候
通过先打开文件再录入到链表
但是为什么程序陷入死循环呢?

int readgoods()
{
    FILE *fp;
    int i;
    int t,y;
    double u;
    char z[20],x[20];
    if((fp = fopen("D:\\f01\\a02.txt","rb")) == NULL)
    {
        printf("打开文件失败!qwq\n");
        exit(0);
    }
    pgoods q,p;
    p=L;
    while(fscanf ( fp,"%d \t\t%s \t\t%s \t\t%d \t\t%.2lf \n",&t,z,&x,&y,&u)!=EOF)
    {
        
        q = (goods *)malloc(sizeof(goods));
        q->num=t;
        strcpy(q->name,z);
        strcpy(q->sort,x);
        q->amount=y;
        q->price=u;
        q->next=NULL;    
        p->next=q;       
        p=q;         
    }

    fclose(fp);
}

这么改试试,供参考:

int readgoods()
{
    FILE *fp;
    int  i;
    int  t,y;
    double u;
    char z[20],x[20];
    if((fp = fopen("D:\\f01\\a02.txt","rb")) == NULL)
    {
        printf("打开文件失败!qwq\n");
        exit(0);
    }
    pgoods q,p;
    p=L;
    while (1) //修改
    //while(fscanf ( fp,"%d \t\t%s \t\t%s \t\t%d \t\t%.2lf \n",&t,z,&x,&y,&u)!=EOF)
    {
        if (fscanf(fp,"%d %s %s %d %lf\n",&t,z,x,&y,&u)!=5) break; //修改
        q = (goods *)malloc(sizeof(goods));
        q->num=t;
        strcpy(q->name,z);
        strcpy(q->sort,x);
        q->amount=y;
        q->price=u;
        q->next=NULL;
        p->next=q;
        p=q;
    }
    fclose(fp);
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^