为什么输入成绩后,输入的成绩是错误的!
#include<stdio.h>#include<malloc.h>
#include<string.h>
#define MAXSIZE 100
typedef struct
{
char no[10];
char name[10];
char sex[10];
char born[15];
char worktime[10];
char address[20];
char tel[15];
int score;
}Student;
typedef struct
{
int last;
Student data[MAXSIZE];
}Seqlist;
void displayAll(Seqlist *L)
{
int i,n;
i=0;
n=L->last;
printf("学号 姓名 性别 出生年月 工作时间 家庭地址 电话号码 数据结构成绩\n");
while(i<=n)
{
printf("%-8s",L->data[i].no);
printf("%-12s",L->data[i].name);
printf("%-8s",L->data[i].sex);
printf("%-12s",L->data[i].born);
printf("%-12s",L->data[i].worktime);
printf("%-12s",L->data[i].address);
printf("%-12s",L->data[i].tel);
printf("%-12d",L->data[i].score);
printf("\n");
i=i+1;
}
}
void display(Seqlist *L,int i)
{
printf("学号 姓名 性别 出生年月 工作时间 家庭地址 电话号码 数据结构成绩\n");
printf("%-8s",L->data[i].no);
printf("%-12s",L->data[i].name);
printf("%-8s",L->data[i].sex);
printf("%-12s",L->data[i].born);
printf("%-12s",L->data[i].worktime);
printf("%-12s",L->data[i].address);
printf("%-12s",L->data[i].tel);
printf("%-12d",L->data[i].score);
printf("\n");
}
Student *inputdata()
{
Student s1;
Student *s=&s1;
char no[10];
printf("\n请输入学号:");
scanf("%s",&no);
if(no[0]=='#')
return NULL;
strcpy(s->no,no);
printf("\n请输入姓名:");
scanf("%s",s->name);
printf("\n请输入性别:");
scanf("%s",s->sex);
printf("\n请输入出生年月:");
scanf("%s",s->born);
printf("\n请输入工作时间:");
scanf("%s",s->worktime);
printf("\n请输入家庭地址:");
scanf("%s",s->address);
printf("\n请输入电话号码:");
scanf("%s",s->tel);
printf("\n请输入数据结构成绩:");
scanf("%d",&s->score);
return s;
}
Seqlist *initseq()
{
Seqlist *L;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
Student *s;
printf("\n请输入学生信息,按#结束输入!");
s=inputdata();
while(s)
{
L->last++;
L->data[L->last]=*s;
s=inputdata();
}
return L;
}
int insertElem(Seqlist *L,int i) //在第i个位置上插入
{
int j,k;
Student *s;
k=L->last;
if(L->last==MAXSIZE-1)
{
printf("\n----------overflow------------\n");
return 0;
}
if(i<1||i>k+2)
{
printf("the insert place error.");
return 0;
}
for(j=k;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
}
s=inputdata();
L->last++;
L->data[i-1]=*s;return 1;
}
int deleteElem(Seqlist *L,char ch[10])
{
int j,i;
for(i=0;i<=L->last+1;i++)
{
if(strcmp(L->data[i].no,ch)==0||strcmp(L->data[i].name,ch)==0)
{
if (L->last == 0)
{
free(L);
}
else
{
for(j=i;j<=L->last+1;j++)
{
if (j+1 <= L->last+1)
{
L->data[j]=L->data[j+1];
}
}
}
}
}
L->last--;
return 1;
}
void locateElem(Seqlist *L,char ch[10])
{
int i;
for(i=0;i<=L->last;i++)
if(strcmp(L->data[i].no,ch)==0||strcmp(L->data[i].name,ch)==0)
{
display(L,i);
break;
}
}
void locateElemByplace(Seqlist *L,int i)
{
display(L,i-1);
}
int lengthList(Seqlist *L)
{
return L->last+1;
}
void insertsort(Seqlist *L)
{
Seqlist *L1=(Seqlist *)malloc(sizeof(Seqlist));
Student temp;
int len,i,j;
len=L->last;
for(i=0;i<=len;i++)
{
L1->data[i]=L->data[i];
}
L1->last=L->last;
for(i=1;i<=len;i++)
{
if(L1->data[i].score>L1->data[i-1].score)
{
temp.score=L1->data[i].score;
strcpy(temp.no,L1->data[i].no);
strcpy(temp.name,L1->data[i].name);
L1->data[i]=L1->data[i-1];
for(j=i-2;(temp.score>L1->data[j].score)&&(j>=0);j--)
L1->data[j+1]=L1->data[j];
L1->data[j+1].score=temp.score;
strcpy(L1->data[j+1].no,temp.no);
strcpy(L1->data[j+1].name,temp.name);
}
}
printf("\n排序后为:\n");
displayAll(L1);
}
int main()
{
printf("\n\n==========================================\n");
printf(" 顺序表学生成绩管理系统 \n ");
printf("\n\n==========================================\n");
Seqlist *L;
char ch[10];
int i,res,a,b=1;
while(b)
{
printf("\n\n");
printf("1.创建 2.指定位置插入 3.按位置删除\n");
printf("4.求学生总数 5.按学号查找 6.按位置查找\n ");
printf("7.显示所有学生 8.成绩排序 9.退出\n");
scanf("%d",&a);
switch(a)
{
case 1:
L=initseq();
displayAll(L);
break;
case 2:
printf("\n输入插入的位置:\n");
scanf("%d",&i);
res=insertElem(L,i);
if(res==1)
displayAll(L);
break;
case 3:
printf("\n输入删除学生的学号或姓名:");
scanf("%s",&ch);
res=deleteElem(L,ch);
if(res==1)
displayAll(L);
break;
case 4:
printf("\n学生总数为%d:\n",lengthList(L));
break;
case 5:
printf("请输入姓名或学号:");
scanf("%s",ch);
locateElem(L,ch);
break;
case 6:
printf("\n输入要查找学生的位置:");
scanf("%d",&i);
locateElemByplace(L,i);
break;
case 7:
displayAll(L);
break;
case 8:
insertsort(L);
break;
case 9:
printf("已退出");
b=0;
break;
}
}
}