nug9966 2021-09-07 20:04 采纳率: 66.7%
浏览 49
已结题

要求输入多个数据,可输入一个数据后程序突然终止了

/*
顺序表
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
*/

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAXSIZE 100

typedef int Status; // 定义函数返回值类型

typedef struct{
char number[11];//学号
char name[20];//姓名
int score;//成绩
}Student;
typedef Student ElemType;
typedef struct{
Student *elem;//指向数据元素的基地址
int length;//线性表当前的长度
}SqList;

Status creatlist(SqList *L)//构造空表
{
L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
if(!L->elem) return 0;//表示 空间分配失败
else {
L->length=0;
return 1;
}
}

void input(Student *elem)//逐个录入学生信息
{
printf("姓名 ");
scanf("%s",elem->name);
printf("学号 ");
scanf("%s",elem->number);
printf("成绩 ");
scanf("%s",elem->score);

}

void output(Student *elem)
{
printf("姓名:%s\n学号:%s\n成绩:%s\n",elem->name,elem->number,elem->score);
}

int find(SqList &L,char str[])
{
int i;
for(i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].name,str)==0)
return i;
}

return 0;

}

/*
操作目的:给定一个学生信息,插入到表中指定的位置
初始条件: 已有线性表
操作结果: 插入指定位置(address1),得到新的线性表
/
void insert(SqList &L,int address1,ElemType information)
{
int i=L.length;
for(i;i>=address1;i--)
{
L.elem[i+1]=L.elem[i];
}
L.elem[i]=information;
L.length++;
}
/

操作目的:删除指定位置的学生记录
初始条件: 已有线性表
操作结果:删除指定位置信息,得到新的线性表
*/
Status deletelist(SqList &L,int address2)
{
int i;
for(i=address2;i<=L.length;i++)
{
L.elem[i]=L.elem[i+1];
}
L.length--;
}

int main()
{
SqList L;
ElemType information;
creatlist(&L);//构造空表
if(creatlist(&L)) printf("创建成功\n");
else printf("创建失败\n") ;

 int N;//确定学生人数,逐个输入信息
 printf("请输入想输入学生信息的人数:"); 
 scanf("%d",&N);
 int i;
 for(i=1;i<=N;i++)
 {
     printf("正在输入第%d位学生信息\n",i);
     input(&L.elem[i]);
 }
 
 for(i=0;i<N;i++)//逐个显示学生信息 
 output(&L.elem[i]); 
 
 char s[20];//定义数组,储存想寻找的名字信息 
 printf("请输入需要查找的姓名 ");
 scanf("%s",s);
 if(find(L,s))  output(&L.elem[find(L,s)]);
 else printf("未录入此人信息

1.

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-08 10:33
    关注

    题主代码修改如下,供参考:

    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    #define MAXSIZE 100
    
    typedef int Status; // 定义函数返回值类型
    
    typedef struct {
        char number[11];//学号
        char name[20];//姓名
        int  score;//成绩
    }Student;
    typedef Student ElemType;
    typedef struct {
        Student* elem;//指向数据元素的基地址
        int    length;//线性表当前的长度
    }SqList;
    
    Status creatlist(SqList* L)//构造空表
    {
        L->elem = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
        if (!L->elem) return 0;//表示 空间分配失败
        else {
            L->length = 0;
            return 1;
        }
    }
    
    //void input(Student* elem)
    void input(SqList* L)//逐个录入学生信息
    {
        int i = L->length;
        if (L->length >= MAXSIZE) {
            printf("表已满!\n");
            return;
        }
        printf("姓名 ");
        scanf("%s",L->elem[i].name);
        printf("学号 ");
        scanf("%s",L->elem[i].number);
        printf("成绩 ");
        //scanf("%s", elem->score);
        scanf("%d", &L->elem[i].score);
        L->length++;
    }
    
    
    //void output(Student *elem)
    void output(ElemType L)
    {    
        //printf("姓名:%s\n学号:%s\n成绩:%s\n", elem->name, elem->number, elem->score);
        printf("姓名:%s\n学号:%s\n成绩:%d\n", L.name, L.number, L.score);
    }
    
    //int find(SqList& L, char str[])
    int find(SqList L, char str[])
    {
        int i;
        if (L.length == 0) {
            printf("表为空,无记录!\n");
            return -1;                  
        }
        for (i = 0; i < L.length; i++)
        {
            if (strcmp(L.elem[i].name, str) == 0)
                return i;
        }
        return -1;   //return 0;
    }
    
    /*
    操作目的:给定一个学生信息,插入到表中指定的位置
    初始条件: 已有线性表
    操作结果: 插入指定位置(address1),得到新的线性表
    */
    void insert(SqList &L,int address1,ElemType information)
    {
        int i=L.length;
        if (L.length >= MAXSIZE) {
            printf("表已满!\n");
            return;
        }
        for (i; i > address1; i--)  //for(i;i>=address1;i--)
        {
            L.elem[i] = L.elem[i - 1];  //L.elem[i+1]=L.elem[i];
        }
        L.elem[i] = information;
        L.length++;
    }
    /*
    操作目的:删除指定位置的学生记录
    初始条件: 已有线性表
    操作结果:删除指定位置信息,得到新的线性表
    */
    Status deletelist(SqList& L, int address2)
    {
        int i;
        if (L.length == 0) {
            printf("表为空,无记录可删!\n");
            return 0;
        }
        
        for (i = address2; i < L.length-1; i++)//for (i = address2; i <= L.length; i++)
        {
            L.elem[i] = L.elem[i + 1];
        }
        L.length--;
        return 1;
    }
    
    int main()
    {
        SqList L;
        ElemType information;
                                                 //creatlist(&L);
        if (creatlist(&L)) //构造空表 
            printf("创建成功\n");
        else                
            printf("创建失败\n");
    
        int N;//确定学生人数,逐个输入信息
        printf("请输入想输入学生信息的人数:");
        scanf("%d", &N);
        int i;
        for (i = 0; i < N; i++)               //for (i = 1; i <= N; i++)
        {
            printf("正在输入第%d位学生信息\n", i + 1);
            input(&L);                       //input(&L.elem[i]);
        }
        for (i = 0; i < L.length; i++) //for (i = 0; i < N; i++)
            output(L.elem[i]);        //逐个显示学生信息 //output(&L.elem[i]);
    
        char s[20];//定义数组,储存想寻找的名字信息 
        printf("\n请输入需要查找的姓名:");
        scanf("%s", s);
        if ((i = find(L, s)) >= 0) {   //if (find(L, s)) 
            output(L.elem[i]);       // output(L.elem[find(L, s)]);
            deletelist(L, i);       //删除找到的记录
        }
        else 
            printf("未录入此人信息\n");
        printf("\n查找并删除后学生信息:\n");
        for (i = 0; i < L.length; i++) //删除后学生信息
            output(L.elem[i]);      
    
        printf("\n插入一个学生信息:\n");
        strcpy(information.name, "abcdefg"); 
        strcpy(information.number, "888"); 
        information.score = 90;
        insert(L, 0, information);
        for (i = 0; i < L.length; i++) //插入后学生信息
            output(L.elem[i]);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月10日
  • 已采纳回答 9月10日
  • 创建了问题 9月7日

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试