以下的程序,如果去掉蓝色的部分,则正常,但如果将红色的部分去掉的话(蓝色保留),这个循环就出错误.首先是排序出问题.而且平均分数也不正确.不知道什么原因,大家帮我看看啦,谢谢!!
(我想保留for(n=0;n<S;n++)这句,因为题目要求输入不少于50人,但我又希望能每次输入完成后提示是否继续输入.否则,只能输入50遍以后才能排序.)
#include<stdio.h>
#define S 3
#define C 2
void input();
void re_input();
void list();
//####定义学生信息结构体####//
struct student
{
int id;
char name[15];
char sex[5];
float achieve[C];
float average;
}stus[S];
//######主函数体开始#######//
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");
do
{
re_input();
printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
printf("排序前的顺序为:\n");
fflush(stdin);
display();
printf("排序后的顺序为:\n");
list();
}
//####学生成绩录入函数####//
void re_input()
{
int n;
int i;
do
{
for(n=0;n<S;n++)
{
printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的 %d 门课的成绩:\t",C);
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%f",&stus[n].achieve[i]);
stus[n].average+=stus[n].achieve[i];
}
stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
}
printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
}
//####学生信息简单显示函数####//
display()
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
//####学生列表排序函数####//
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}