以下の私のコードは、生徒の名前 (名前と姓) とその得点のリストを含む c のファイルを読み取り、ファイルを出力し、平均得点、最高得点を見つけ、最高得点を取得した生徒の名前を出力します。私の問題は、一部の学生の名前と成績がファイル内で繰り返されていることです。したがって、同じファイルを読み取る方法を知りたいのですが、名前とスコアが重複していないリストのみを印刷できます。次に、探している残りの情報 (つまり、平均) を更新できます。
#define MAX 30 // Maximum number of students
#define MINRANGE 0 // range of scores
#define MAXRANGE 100
int computeMax(double stSco[], int numSt); //Gets the average and highest score
void outputBest(double number[], char nameHigh[][16], int highPl, int totalSt);
//Students with the highest score
int main()
{
double score[MAX];
char name[MAX][16];
char fileName[80];
int k, count=0, hgCt;
stream dataFile;
banner();
printf("Type the name of file you want to read\n");
scanf("%79[^\n]", fileName);
puts(" Grade Student\n");//Header
dataFile = fopen(fileName, "r");
if(dataFile == NULL){
fatal( "Cannot open %s for reading", fileName);
}
for(k=0; k < MAX; k++){
fscanf(dataFile, "%lg %16[^\n]", &score[k], name[k]);
if(feof(dataFile)) break;
if(score[k] >= MINRANGE && score[k] <= MAXRANGE){ //Score validation
printf("%6.1f %s\n", score[k], name[k]);
count++; //It counts how many students there are actually
}
else{
fatal( "There are illegal grades in file %s", fileName);
}
}
fclose(dataFile);
if(count == 0){ //Checks if file is empty
fatal( "The file %s is empty", fileName);
}
else {
hgCt = computeMax(score, count); //Stores the returned highest score
outputBest(score, name, hgCt, count);
bye();
}
return 0;
}