2016-11-30 143 views
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; 
     } 

    } 
} 
} 

任何你可以做的事情来帮助我真的很感激它。 谢谢大家。

回答

0

参数以错误的顺序传递给Sort_Arrays函数。 at_bat作为第二个参数传入。由于Sort_Arrays是根据第二个参数进行排序的,因此您的数组将按照at_bat进行排序。

+0

好吧,我明白你在说什么。当我改变它的工作,但仍然有一个问题。我共有13行,其中只有11行实际排序,其中2个被转换为真正长的数字。有一个问题的数据点之一是平均值= 0.000。而不是去buttom它进入列表的顶部与平均数目被改为3116043012715996800000000000000.000 – VictorS

+0

我想通了,我意外地调用我的函数与读取文件大括号,(只是在fscanf下)。在我将它移到括号外之后,它一切正常。谢谢诺亚谢里尔,你救了我但是。 – VictorS

+0

我很高兴能帮上忙。经过一段时间之后,有一个新的眼睛通常是有用的:)。 –