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

/*
顺序表
(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.

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

#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;
}

printf("成绩 ");
scanf("%s",elem->score);//这里写错了,应该是scanf("%d",&elem->score);