在子函数中输出的结果都不对,且有的直击跳过操作
#include <stdio.h>#include <stdlib.h>
struct Student{
int ID;
int class;
char name[10];
float score[3];
float sum;
}stu[3];
void print(void)
{
printf("1.input\n");
printf("2.delete\n");
printf("3.select\n");
printf("4.order\n");
printf("5.output\n");
printf("6.quit\n");
printf("please input your option\n");
}
void add(struct Student stu[],int j)
{
int i;
for(i=0;i<j+1;i++)
{
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
}
}
void input(struct Student stu[],int j)
{
int i,n;
char ch[10],ch1[10]={"yes"},ch2[10]={"no"};
scanf("%d%d%s",&stu[j].ID,&stu[j].class,stu[j].name);
for(i=0;i<3;i++)
scanf("%f",&stu[j].score[i]);
printf("continue?");
scanf("%s",ch);
if(strcmp(ch,ch1)==0) input(stu,j++);
if(strcmp(ch,ch2)==0)
{
add (stu,j);
print();
}
}
void delete(struct Student stu[])
{
char ch1[10]={"yes"},ch2[10]={"no"},ch3[10];
int id,i,j;
scanf("%d",&id);
for(i=0;i<3;i++)
{
if(id!=stu[i].ID)
{
printf("%d,%d,%s,",stu[i].ID,stu[i].class,stu[i].name);
for(j=0;j<3;j++)
{
printf("%.1,",stu[i].score[j]); //出现bug 从这里开始输出错误
}
printf("%.1",stu[i].sum);
}
}
printf("continue?");
scanf("%s",ch3);
if(strcmp(ch3,ch1)==0) delete(stu);
if(strcmp(ch3,ch2)==0) print();
}
void select(struct Student stu[])
{
char ch[10],ch1[10]={"yes"},ch2[10]={"no"},ch3[10];
int id,cla,i,j,flag=0;
scanf("%d",&id);
for(i=0;i<3;i++)
{
if(id==stu[i].ID) //根本就没有输出
{
printf("%d,%d,%s,",stu[i].ID,stu[i].class,stu[i].name);
for(j=0;j<3;j++)
{
printf("%.1",stu[i].score[j]);
}
printf("%.1",stu[i].sum);
flag++;
}
}
if(flag!=0) printf("there is no eligible student");
printf("continue?");
scanf("%s",ch);
if(strcmp(ch,ch1)==0)
{
scanf("%d",&cla);
for(i=0;i<3;i++)
{
if(cla==stu[i].class) //根本就没有输出
{
printf("%d,%d,%s,",stu[i].ID,stu[i].class,stu[i].name);
for(j=0;j<3;j++)
{
printf("%.1",stu[i].score[j]);
}
printf("%.1",stu[i].sum);
}
}
printf("continue?");
scanf("%s",ch3);
if(strcmp(ch3,ch2)==0) print();
}
if(strcmp(ch,ch2)==0) print();
}
void order(struct Student stu[])
{
int i,j;
struct Student temp;
for(i=0;i<2;i++) // 压根就没有输出
for(j=0;j<2-i;j++)
{
if(stu[j].class>stu[j+1].class)
{
temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;
}
if(stu[j].class==stu[j+1].class)
{
if(stu[j].sum>stu[j+1].sum)
{
temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;
}
}
}
print();
}
void output(struct Student stu[])
{
int i,j;
for(i=0;i<3;i++)
{
printf("%d,%d,%s,",stu[i].ID,stu[i].class,stu[i].name);
for(j=0;j<3;j++)
{
printf("%.1",stu[i].score[j]);
}
printf("%.1\n",stu[i].sum); //输出还是错误的
}
print();
}
void match(int n)
{
switch(n)
{
case 1:input(stu,0); break;
case 2:delete(stu);break;
case 3:select(stu);break;
case 4:order(stu);break;
case 5:output(stu);break;
case 6:break;
}
}
int main()
{
int a[6];
print();
scanf("%d",&a[0]);
if(a[0]!=6)
{
match(a[0]);
scanf("%d",&a[1]);
if(a[1]!=6)
{match(a[1]);
scanf("%d",&a[2]);
if(a[2]!=6)
{
match(a[2]);
scanf("%d",&a[3]);
if(a[3]!=6)
{
match(a[3]);
scanf("%d",&a[4]);
if(a[4]!=6)
{
match(a[4]);
scanf("%d",&a[5]);
if(a[5]!=6)
{
match(a[5]);
}
}
}
}
}
}
return 0;
}
[此贴子已经被作者于2015-11-9 22:35编辑过]