我必须编写一个程序来打开一个包含3列的文件,每行代表一个棒球运动员的数据。第一列表示球员号码,第二列表示击球次数,最后第三列表示平均命中数。我必须按平均命中率的降序排列玩家。我遇到了问题,它按照蝙蝠次数的降序排序。前3个数字也没有正确打印出来。
这里是前3名球员数据
3 5 .400
5 1.000
9 30 .167
这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float BattingA[13], At_Bat[13];
int Player_ID[13];
void Sort_Arrays(int ID[], float at_bat[], float average[]);
int main()
{
int ID[13];
float at_bat[13], average[13];
FILE *readfile;
int i;
if ((readfile = fopen("cubs-batting-ws-ab-avg.txt", "r")) == NULL)
{
printf("The file failed to open\n");
}
for (i = 0; i < 13; i++)
{
fscanf(readfile, "%d %f %f", ID + i, at_bat + i, average + i);
Sort_Arrays(ID, at_bat, average);
}
printf("numbers\n");
for (i = 0; i < 13; i++)
{
printf("%d %.0f %.3f \n", ID[i], at_bat[i], average[i]);
}
if (fclose(readfile) == EOF)//close the file.
{
printf("The file failed to close.\n");
}
return 0;
}
void Sort_Arrays(int ID[], float BattingA[], float AtBat[])
{
int x, y = 13, z;
float New, NewID, NewAtBat;
for (x = 0; x < y; x++)
{
for (z = x + 1; z < y; z++)
{
if (BattingA[x] < BattingA[z])
{
NewID = ID[x];
NewAtBat = AtBat[x];
New = BattingA[x];
ID[x] = ID[z];
AtBat[x] = AtBat[z];
BattingA[x] = BattingA[z];
ID[z] = NewID;
AtBat[z] = NewAtBat;
BattingA[z] = New;
}
}
}
}
你能做些什么来帮助我真的很感激。 谢谢大家。
答案 0 :(得分:0)
参数以错误的顺序传递给Sort_Arrays函数。 at_bat作为第二个参数传入。当Sort_Arrays被编写为根据第二个参数进行排序时,您的数组将根据at_bat进行排序。