わかりましたので、以下のコードがあり、ファイルからさまざまなものを引き出して構造体の配列に入力しているだけです。最初は「一見」機能しますが、ファイルの処理が完了した後に印刷すると、すべてのコースと名前を最後の値に置き換えましたが、奇妙なことに、これは整数 (成績) では発生しません。成績は適切に入力されます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
char *name;
char *course;
int grade;
};
void courseSort(struct student d[20], int size);
int main(void)
{
FILE* fp;
char* filename = "grades.csv";
char buffer[100];
char* name, *class;
char* del=",";
int grade, i, counter=0;
struct student d[20];
if((fp=fopen(filename, "r"))==NULL)
{
printf("unable to open %s\n", filename);
exit(1);
}
while(fgets(buffer, sizeof(buffer), fp) !=NULL)
{
name = strtok(buffer,del);
class=strtok(NULL,del);
grade = atoi(strtok(NULL,del));
d[counter].name=name;
d[counter].course=class;
d[counter].grade=grade;
printf("%s %s %d\n",d[counter].name,d[counter].course,d[counter].grade);
counter++;
}
printf("\n\n\n");
for(i=0;i<counter;i++)
printf("%s %s %d\n",d[i].name,d[i].course,d[i].grade);
courseSort(d,counter);
fclose(fp);
}
何が間違っているのかわかりません:(すべてが簡単に思えますが、なぜすべてを最新のものに置き換えるのかわかりません。