兼套使用Switch不能传值,求解。

LogansCodingLife 2013-04-05 12:18:53
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 2
struct Student
{
int number;
char name[20];
float chinese,math,english;
};
void login();
void display_menu();
void showMenu();
int inputInfo(struct Student student[],int length);
int outputInfo(struct Student student[],int length);
int statistic(struct Student student[],int length);
int bubblesort(struct Student student[],int length);
int main()
{
login();
int choice;char name[20];
struct Student student[N];
display_menu();
start:
printf("Please input your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:inputInfo(student,N);break;
case 2:output(student,N);break;
case 3:queryInfo(student,name);break;
case 4:statistic(student,N);break;
case 5:exit(0);
default:printf("Wrong input!");break;
}
goto start;
return 0;
}
void login()
{
int password;
printf("请输入口令:");
scanf("%d",&password);
if (password==123||password==111)
printf("The key is right,Welcome to use this system !\n");
else
printf("The key is wrong,Please check it and try again!\n");
}
void display_menu()
{
printf("= = = = = = 学生成绩管理系统= = = = = =\n");
printf("= =\n");
printf("= 1 录入 =\n");
printf("= 2 输出 =\n");
printf("= 3 查询 =\n");
printf("= 4 汇总统计 =\n");
printf("= 5 结束 =\n");
printf("= =\n");
printf("= = = = = = HCG = = = = = =\n");

}
int inputInfo(struct Student student[],int length)
{
int i;
printf("Please input the student's Infomation(enter 0 to end):\n");
for(i=0;i<length;i++)
{
fflush(stdin);
printf("学号:");
scanf("%d",&student[i].number);
if(student[i].number==0)break;
printf("Name:");
scanf("%s",student[i].name);
printf("Chinese:");
scanf("%f",&student[i].chinese);
printf("Math:");
scanf("%f",&student[i].math);
printf("English:");
scanf("%f",&student[i].english);
}
}
int output(struct Student student[],int length)
{
int i;
for(i=0;i<N;i++)
{
printf("Student number:%d\n",student[i].number);
printf("Name:%s\n",student[i].name);
printf("Chinese score:%f\n",student[i].chinese);
printf("Math score:%f\n",student[i].math);
printf("English score:%f\n",student[i].english);
}
}
int queryInfo(struct Student find[],char n[])
{
int i;
puts("Please enter the students name you want to find:");
scanf("%s",n);
for(i=0;i<N;i++)
{
if(strcmp(n,find[i].name)==0)
{
printf("student number:%d \n name:%s \n chinese score:%f \n math score:%f \n English score:%f",find[i].number,
find[i].name,find[i].chinese,find[i].math,find[i].english);
}
if(i>=N)puts("Not exist!\n");
}
}
int statistic(struct Student student[],int length)
{
int choice;
showMenu();
start:
printf("Please input your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:{bubblesort(student,5);break;}
case 4:exit(0);
default:printf("Haven't developed yet !\n");break;
}
goto start;
}
int bubblesort(struct Student student[],int length)
{
int i,max,temp,n;
for(i=0;i<length;i++)
{
for(max=0;max<length;max++)
{
if(student[i].chinese>student[max].chinese)
{
temp=student[i].number;
student[i].number=student[max].number;
student[max].number=temp;
}
}
}
for(n=0;i<length;i++)
{
printf("%d",student[i].number);
}
}
void showMenu()
{
printf("= = = = = = 学生成绩管理系统= = = = = =\n");
printf("= =\n");
printf("= 1 语文成绩 =\n");
printf("= 2 数学成绩 =\n");
printf("= 3 英语成绩 =\n");
printf("= 4 结束 =\n");
printf("= =\n");
printf("= = = = = = HCG = = = = = =\n");
}

录入后选择4的汇总统计,再选择1的语文成绩进行冒泡排序。bubblesort函数里的结构体student没有接收录入的值是什么情况??难倒兼套使用switch后值就清零了?还是我哪里弄错了。
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LogansCodingLife 2013-04-06
  • 打赏
  • 举报
回复
引用 4 楼 lthyxy 的回复:
买本 代码大全2 看看?
呵呵,我是自学的,恩,快学完了。 快一个月了,然后再看看《代码大全》。这书貌似不错的样子。
漫步者、 2013-04-05
  • 打赏
  • 举报
回复
跟switch没有关系,你自己断点调试一下
liutengfeigo 2013-04-05
  • 打赏
  • 举报
回复
买本 代码大全2 看看?
LogansCodingLife 2013-04-05
  • 打赏
  • 举报
回复
引用 2 楼 yubao669016 的回复:
for(i=0;i<length-1;i++) { for(max=0;max<length-i-1;max++) { if(student[max].chinese>student[max+1].chinese) { temp=student[max].chinese……
问题出在坑爹的n 和i 上面。。 粗心啊。 其它的都没有问题。
yubao669016 2013-04-05
  • 打赏
  • 举报
回复
for(i=0;i<length-1;i++) { for(max=0;max<length-i-1;max++) { if(student[max].chinese>student[max+1].chinese) { temp=student[max].chinese; student[max].chinese=student[max+1].chinese; student[max+1].chinese=temp; } } } 这是冒泡法, for(n=0;i<length;i++) { printf("%d",student[i].number); }你把里面的i改成n或者把n改成i就行了。 其实你的switch没错,还有给你点建议:可以用while代替goto,能少用goto就尽量少用吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧