为什么监视窗口里显示head是错误的指针,代码如下

#include <stdio.h>
#include <malloc.h.>
#include <string.h>

typedef struct STU
{
    char name[20];
    int ID;
    char gender[6];
    int Chinese;
    int Math;
    int English;
    int avg;
    struct STU *next;
}Stu,*pStu;

pStu create(void);

int main()
{
    int n;
    pStu head=NULL,p1;

    printf("欢迎进入学生排序系统\n");

    printf("选择要进行的操作(0:退出  1:录入学生信息):");
    scanf("%d",&n);

    if(n==0)
    {
        return 0;
    }

    printf("请输入原始学生信息:\n");

    head=create();

    return 0;
}

pStu create(void)
{
    int m;
     char name[20];
     int ID;
     char gender[6];
     int Chinese;
     int Math;
     int English;
     pStu head,p,s;

     head=p=(pStu)malloc(sizeof(Stu));
     head->next=NULL;

     printf("需要添加学生信息吗?(0:结束   1:继续)\n");
     scanf("%d",&m);

     while(m!=0)
     {
         s=(pStu)malloc(sizeof(Stu));
         printf("请输入姓名:\n");
         scanf("%s",s->name);

         printf("请输入性别:\n");
         scanf("%s",s->gender);

         printf("请输入学号:\n");
         scanf("%d",&s->ID);

         printf("请输入语文成绩:\n");
         scanf("%d",&s->Chinese);

         printf("请输入数学成绩:\n");
         scanf("%d",&s->Math);

         printf("请输入英语成绩:\n");
         scanf("%d",&s->English);

         s->avg=(s->Chinese+s->English+s->Math)/3;

         s->next=p->next;
         p->next=s;
         p=s;

         printf("需要添加学生信息吗?(0:结束   1:继续)\n");
         scanf("%d",&m);

     }

     return head;
}

供参考:

#include <stdio.h>
#include <malloc.h.>
#include <string.h>

typedef struct STU
{
    char name[20];
    int  ID;
    char gender[6];
    int  Chinese;
    int  Math;
    int  English;
    int  avg;
    struct STU *next;
}Stu,*pStu;

pStu create(void);

int main()
{
    int n;
    pStu head=NULL,p1;

    printf("欢迎进入学生排序系统\n");

    printf("选择要进行的操作(0:退出  1:录入学生信息):");
    scanf("%d",&n);

    if(n==0)
    {
        return 0;
    }

    printf("请输入原始学生信息:\n");

    head=create();

    p1=head->next;
    while(p1){
         printf("%s %d %s %d %d %d %d\n",p1->name,p1->ID,
                p1->gender,p1->Chinese,p1->Math,p1->English,p1->avg);
         p1=p1->next;
    }
    
    return 0;
}

pStu create(void)
{
     int  m;
     //char name[20];
     //int  ID;
     //char gender[6];
     //int  Chinese;
     //int  Math;
     //int  English;
     pStu head,p,s;

     head=(pStu)malloc(sizeof(Stu));
     head->next=NULL;
     p=head;
     //printf("需要添加学生信息吗?(0:结束   1:继续)\n");
     //scanf("%d",&m);

     while(1)
     {
         printf("需要添加学生信息吗?(0:结束   1:继续)\n");
         scanf("%d",&m);
         if(m==0)  break;
         s=(pStu)malloc(sizeof(Stu));
         printf("请输入姓名:\n");
         scanf("%s",s->name);

         printf("请输入性别:\n");
         scanf("%s",s->gender);

         printf("请输入学号:\n");
         scanf("%d",&s->ID);

         printf("请输入语文成绩:\n");
         scanf("%d",&s->Chinese);

         printf("请输入数学成绩:\n");
         scanf("%d",&s->Math);

         printf("请输入英语成绩:\n");
         scanf("%d",&s->English);

         s->avg=(s->Chinese+s->English+s->Math)/3;

         s->next=p->next;
         p->next=s;
         //p=s;
     }

     return head;
}