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
我很高興能幫上忙。經過一段時間之後,有一個新的眼睛通常是有用的:)。 –