33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
int main()
{
struct
{
char name[20];
double score[3];
char xb;
} str[100], stu;
int n,i,j,a,b;
double s[10],t[10];
//while(scanf("%d",&n)!=-1)
while(scanf("%d",&n) != EOF)
{
for(i=0;i<n;i++)
{
scanf("%s %c",str[i].name,&str[i].xb);
for(j=0;j<3;j++)
{
scanf("%lf",&str[i].score[j]);
}
}
for(i=0;i<n;i++)
{
s[i]=0;
for(j=0;j<3;j++)
{
s[i]+=str[i].score[j];
}
t[i]=s[i]*1.0/3;
}
//for(i=0;i < 10;i++)
for(i=0;i < n;i++)
{
a = i;
//for(j=i+1;j<10;j++)
for(j=i+1;j<n;j++)
{
if(t[j]<t[a])
a=j;
}
if(i!=a)
{
stu=str[i];
str[i]=str[i+1];
str[i+1]=stu;
}
}
for(i=0;i<n;i++)
{
//if(str[i].xb=='f');
if(str[i].xb=='f')
break;
}
//printf("I choose %s,and her score is %lf", str[b].name,t[b]);
printf("I choose %s,and her score is %lf", str[b].name,t[b]);
}
return 0;
}
问题列表:
1. while输入n是将!= -1改成!= EOF
2. 两层for循环里,将10改成n,因为若n输入的是小于10,则排序会导致错误;
3. 最后的输出,b是初始化的值,会导致str和t数组越界
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。