为什么线性表写进内容后最后表达出来的内容不是我想要的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIST_INIT_SIZE 100
typedef struct{
char xuehao[14];
char name[20];
int sex;
char tel[14];
char qq[12];
}ElemType;

typedef struct{
ElemType *elem;//表的空间基址
int length;//表的长度
int Listsize;//表的长度上限
}SqList;

void InitSeqList(SqList &L)//线性表的创建
{ char flag;
int i,n;
ElemType *p;
L.elem=(ElemType )malloc (LIST_INIT_SIZEsizeof(ElemType));//动态分配空间
L.length=0;
L.Listsize=LIST_INIT_SIZE;
printf("是否输入初始数据?(Y/N)");
scanf("%c",&flag);
{
if(flag=='N' ||flag=='n')
return ;}
printf("请输入初始化数据的个数:");
scanf("%d",&n);
if(n>L.Listsize)
{
printf("数据太多,不足以存储!");
return ;}
p=L.elem;
L.length=n;
for(i=0;i<n;i++)
{
printf("请输入第%d个数据(学号 姓名 性别(0或1) 联系电话 qq号):\n",i+1);
scanf("%s%s%d%%s",p->xuehao,p->name,&p->sex,p->tel,p->qq);
p++;
}
return ;
}

void PrintSeqList(SqList &L)
{int i;
printf("学号 姓名 性别 联系电话 QQ号\n");
for(i=0;i<L.length;i++)
{
printf("%-14s%-14s",L.elem[i].xuehao,L.elem[i].name);
if(L.elem[i].sex) printf(" 男 ");
else printf(" 女 ");
printf("%-14s%-10s",L.elem[i].tel,L.elem[i].qq);
}
}

int main()
{
SqList L;
InitSeqList(L); 
PrintSeqList(L);
return 0; 
}

不知道程序错在哪里,为什么结果出来那么奇怪

img


如果指出错误之处,一定会积极采纳,谢谢!

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIST_INIT_SIZE 100
typedef struct stu{
    char xuehao[14];
    char name[20];
    int  sex;
    char tel[14];
    char qq[12];
}ElemType;

typedef struct{
    ElemType *elem;//表的空间基址
    int length;//表的长度
    int Listsize;//表的长度上限
}SqList;

void InitSeqList(SqList &L)//线性表的创建
{
    char flag;
    int i,n;
    ElemType *p;
    L.elem=(ElemType*)malloc (LIST_INIT_SIZE*sizeof(ElemType));//动态分配空间
    L.length=0;
    L.Listsize=LIST_INIT_SIZE;
    printf("是否输入初始数据?(Y/N)");
    scanf("%c",&flag);
    getchar();            //修改 吸收缓冲区多余字符
    if(flag=='N' ||flag=='n')
        return ;
    printf("请输入初始化数据的个数:");
    scanf("%d",&n);
    getchar();            //修改  吸收缓冲区多余字符
    if(n>L.Listsize)
    {
        printf("数据太多,不足以存储!");
        return ;
    }
    p=L.elem;
    L.length=n;
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个数据(学号 姓名 性别(0或1) 联系电话 qq号):\n",i+1);
        scanf("%s%s%d%s%s",p->xuehao,p->name,&p->sex,p->tel,p->qq);
        //scanf("%s%s%d%%s",p->xuehao,p->name,&p->sex,p->tel,p->qq);//修改格式符与参数 数量不符
        p++;
    }
    return;
}

void PrintSeqList(SqList &L)
{
    int i;
    printf("学号 姓名 性别 联系电话 QQ号\n");
    for(i=0;i<L.length;i++)
    {
        printf("%-14s%-14s",L.elem[i].xuehao,L.elem[i].name);
        if(L.elem[i].sex) printf(" 男 ");
         else             printf(" 女 ");
        printf("%-14s%-10s\n",L.elem[i].tel,L.elem[i].qq);//修改 增加换行符\n
        //printf("%-14s%-10s",L.elem[i].tel,L.elem[i].qq);
    }
}

int main()
{
    SqList L;
    InitSeqList(L);
    PrintSeqList(L);

    return 0;
}