_Zora. 2022-03-20 19:03 采纳率: 85%
浏览 14
已结题

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

#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


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

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-20 20:36
    关注

    修改处见注释,供参考:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日