建立学生信息链表 pta报错

pta练习,最后一个检查点不对
题目截图

img

void input()
{
    struct stud_node *newp,*lp;
    lp = (struct stud_node *)malloc(sizeof(struct stud_node));
    head = lp;
    tail = lp->next;
    scanf("%d %s %d\n", &lp->num, &lp->name, &lp->score);
    while(1)
    {
        newp = (struct stud_node *)malloc(sizeof(struct stud_node));
        lp->next = newp;
        tail = newp->next;
        lp = newp;
        scanf("%d", &newp->num);
        if(newp->num == 0)
            break;
        scanf("%s%d", &newp->name, &newp->score);
    }
}

![img](

我的解答https://img-mid.csdnimg.cn/release/static/image/mid/ask/170904261176178.png "#left")
各位朋友帮忙看看咯。。

修改如下,供参考:

void input()
{
    struct stud_node* newp = NULL;
    while (1)
    {
        newp = (struct stud_node*)malloc(sizeof(struct stud_node));
        newp->next = NULL;
        scanf("%d", &newp->num);
        if (newp->num == 0) {
            free(newp);
            break;
        }
        scanf("%s %d", newp->name, &newp->score);
        if (!head)
            head = newp;
        else
           tail->next = newp;
        tail = newp;
    }
}

你这个tail有问题
while循环结束后,tail = lp就行了。
while中应该先输入学号,如果为0就break,然后才是新建节点,输入数据,加入链表。你这都加入完了,才判断,那最后一个节点是不需要的啊