我就想创建链表并打印出来,但是结果运行出问题了。求大神指点

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int id;
    int score;
    struct node *next;
 }LinkList;
 LinkList *create(){
     LinkList *head ,*p;
    int id;
     int score;
     p=(LinkList *)malloc(sizeof(LinkList));
     head=p;
     p->next=NULL;
     printf("请输入学号和成绩:\n");
     scanf("%d%d",&id,&score);
     while(id!=0){
         p->id=id;
         p->score=score;
         p->next=NULL;
         scanf("%d%d",&id,&score);
     }
    return head;
 }
 void print(LinkList *head){
     LinkList *p;
     p=head->next;
     while(p!=NULL)
     printf("%d%d",p->id,p->score);
     p=p->next; 
 }
 main(){
     LinkList *head;
     create(); 
     print(head); 
 }
 

凡写了注释的行,是改动了的行。

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int id;
    int score;
    struct node* next;
}LinkList;
LinkList* create() {
    LinkList* head, * p;
    int id;
    int score;
    p = (LinkList*)malloc(sizeof(LinkList));
    head = p;
    p->next = NULL;
    printf("请输入学号和成绩:\n");
    scanf_s("%d %d", &id, &score);    //%d%d改为%d %d,输入的时候两个书中间加一个空格
    while (id != 0) {
        p->id = id;
        p->score = score;
        p->next = NULL;
        scanf_s("%d %d", &id, &score);     //同上%d%d改为%d %d
    }
    return head;
}
void print(LinkList* head) {
    LinkList* p;
    p = head;
    while (p != NULL) {     //按照create()的写法,头节点head是有数据的,因此头节点也需要打印
        printf("%d %d", p->id, p->score);
        p = p->next;    //并且p==NULL时,不应该再p = p->next,因此这句放到循环中
    }    //循环
}
int main() {     //main函数也需要返回类型,加int
    LinkList* head = nullptr;    //指针初始化一下
    head = create();    //按create()的写法,将返回头节点,因此head = create();
    print(head);

    return 0;   //为main 返回一个0,
}