2016-11-30 255 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

我很高興能幫上忙。經過一段時間之後,有一個新的眼睛通常是有用的:)。 –