typedef struct
{
char name[128];
int score[12];
int abs[12];
int exam[12];
} Student;
int read_data(char *fname, Student *std)
{
FILE *fp;
int i = 0;
if ((fp = fopen(fname, "r")) == NULL) {
printf(error:fileopen\n");
return 1;
} else {
while (fscanf(fp, "%[^,],%d,%d,%d ", std[i].name, std[i].score, std[i].abs, std[i].exam) == 4) {
i++;
}
}
fclose(fp);
return 0;
}
int main(void)
{
char fname[FILENAME_MAX];
Student student[100];
printf("file name:=");
scanf("%s", fname);
read_data(fname, student);
return 0;
}
name = std1
score = X
abs =
exam =
name = std2
score =
abs =
exam =
-----result-----
構造体Studentをポインタで関数に渡してcsv形式のデータを読み取らせたいのですが
構造体とポインタの関係が上手く理解出来てないのか上手く行きません。
fscanfの第三引数には変数のポインタを与える必要がありますよね。
std.nameはstdはポインタで、.nameも配列名なのでポインタですよね。これは上手く代入できています。
std.scoreはstdはポインタで、.scoreは普通のint型ですよね。ここが上手く行きません。
std.(&score)のように見慣れない形式で記述しても案の定コンパイラにエラーが吐かれます。
構造体のポインタと構造体メンバのポインタの関係もよくわかりません。
初歩的な質問ですが回答していただけると助かります。