0
我必须编写一个程序来打开一个包含3列的文件,每行代表棒球运动员的数据。第一列表示球员人数,第二列表示蝙蝠时间,最后是平均命中率。我必须按照平均命中率的降序对玩家进行排序。我遇到问题,它按照蝙蝠次数的降序对它们进行排序。前3个数字也没有正确打印。按降序对数组进行排序
这里是第3个玩家数据
3 5 0.400
5 1 0.000
9 30 0.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;
}
}
}
}
任何你可以做的事情来帮助我真的很感激它。 谢谢大家。
好吧,我明白你在说什么。当我改变它的工作,但仍然有一个问题。我共有13行,其中只有11行实际排序,其中2个被转换为真正长的数字。有一个问题的数据点之一是平均值= 0.000。而不是去buttom它进入列表的顶部与平均数目被改为3116043012715996800000000000000.000 – VictorS
我想通了,我意外地调用我的函数与读取文件大括号,(只是在fscanf下)。在我将它移到括号外之后,它一切正常。谢谢诺亚谢里尔,你救了我但是。 – VictorS
我很高兴能帮上忙。经过一段时间之后,有一个新的眼睛通常是有用的:)。 –