我的程序为什么只能进菜单一,进不了后面的,求帮忙。。。
#include<stdio.h>#include<string.h>
char k[5];
struct student //定义结构体,存储学生姓名和成绩
{
char name;
float score;
}stu[20];
void choose(); //函数申明
void input();
void sort1();
void sort2();
void search1();
void search2();
void back();
void look();
int find(int t,int m,int n);
void menu() //菜单
{
printf("\n\n\n 欢迎进入学生成绩管理系统\n\n");
printf(" ~~~~~~~~~~~~~~~~菜单~~~~~~~~~~~~~~\n");
printf(" [1].输入学生成绩\n");
printf(" [2].直接法排序\n");
printf(" [3].冒泡法排序\n");
printf(" [4].线性查询\n");
printf(" [5].对分查询\n");
printf(" [6].浏览成绩\n");
printf(" [0].退出系统\n");
choose();
}
void choose()
{
int i;
printf("请输入数字:\n");
scanf("%d",&i);
switch(i)
{
case 1:input(); break;
case 2:sort1(); break;
case 3:sort2(); break;
case 4:search1(); break;
case 5:search2(); break;
case 6:look(); break;
case 0:printf("正在退出\n"); break;
default:printf("error!\n");
}
}
void input() //输入20个学生的成绩
{
int i,j;
for(i=0;i<20;i++)
{
j=i+1;
printf("请输入第%d个学生的成绩:(60~99分)\n",j);
scanf("%f",&stu[i].score);
if(stu[i].score>99||stu[i].score<60)
{
printf("输入错误请重新输入");i=i-1;
}
}
back();
}
void sort1() //用自然排序法将学生成绩由低到高排列
{
int i,j;
float t;
char a;
for(i=0;i<19;i++)
for(j=i+1;j<20;j++)
if(stu[i].score>stu[j].score)
{
t=stu[i].score;
stu[i].score=stu[j].score;
stu[j].score=t;
a=stu[i].name;
stu[i].name=stu[j].name;
stu[j].name=a;
}
back();
}
void sort2() //用冒泡法将学生成绩由低到高排列
{
int i,j;
float t;
char a;
for(j=1;j<=19;j++)
for(i=0;i<20-j;i++)
if(stu[i].score>stu[i+1].score)
{
t=stu[i].score;
stu[i].score=stu[i+1].score;
stu[i+1].score=t;
a=stu[i].name;
stu[i].name=stu[i+1].name;
stu[i+1].name=a;
}
back();
}
void search1() //用线性搜索法检索某个学生的成绩
{
int i;
char name;
printf("请输入所要查询的学生的名字:\n");
gets(k);
scanf("%c",&name);
for(i=0;i<20;i++)
if(stu[i].name==name)
{
printf("\n\n你查询的学生成绩如下:\n");
printf("姓名:%2c ",stu[i].name);
printf("成绩:%5.1f\n",stu[i].score);
}
back();
}
void search2() //用对分搜索法检索某个学生的成绩
{
int i,t;
char name;
printf("请输入你要查询的学生的名字:\n");
gets(k);
scanf("%c",&name);
for(i=0;i<20;i++)
if(stu[i].name==name)
t=i;
i=find(t,0,19);
printf("\n\n你查询的学生成绩如下:\n");
printf("姓名:%c ",stu[i].name);
printf("成绩:%.1f\n",stu[i].score);
back();
}
int find(int t,int m,int n)
{
int i;
while(m<=n)
{
i=(m+n)/2;
if(i<t) m=i+1;
else if(i>t) n=i-1;
else return(i);
}
}
void back() //返回主菜单
{
int i;
printf("\n\n");
printf("输入0返回主菜单\n");
scanf("%d",&i);
if(i==0)
menu();
else back();
}
void look() //显示所有学生的成绩
{
int i;
printf("所有学生成绩如下:\n\n");
for(i=0;i<20;i++)
{
printf("%4d 姓名:%c ",i+1,stu[i].name);
printf("成绩:%5.1f\n",stu[i].score);
}
back();
}
void main()
{
int x;
for(x=0;x<20;x++)
{
stu[x].name=x+97;
}
menu();
}