使用fscanf读取文件并保存到struct c语言数组中

使用fscanf读取文件并保存到struct c语言数组中,c,arrays,struct,C,Arrays,Struct,我试图从一个文件中读取数据并将其保存到一个struct数组中。但是我不知道该怎么做 结构是这样的 struct Student students { int stuid; char name[21]; double grade; } 文本文件是这样的 1,76.50,Joe Smith 2,66.77,John Campbell 3,88.99,Jane Common //declaring the struct struct Student test[3]; in

我试图从一个文件中读取数据并将其保存到一个struct数组中。但是我不知道该怎么做

结构是这样的

struct Student students {
    int stuid;
    char name[21];
    double grade;
}
文本文件是这样的

1,76.50,Joe Smith
2,66.77,John Campbell
3,88.99,Jane Common
//declaring the struct
struct Student test[3];

int loadgrade(struct Student* student, FILE* file) {
    while (fscanf(file, "%d,%lf,%21[^\n]", &student.stuid, &student.grade, &student.name) == 3)
我试过的代码结果是这样的

1,76.50,Joe Smith
2,66.77,John Campbell
3,88.99,Jane Common
//declaring the struct
struct Student test[3];

int loadgrade(struct Student* student, FILE* file) {
    while (fscanf(file, "%d,%lf,%21[^\n]", &student.stuid, &student.grade, &student.name) == 3)
我不确定如何将数据保存到数组中,因为我使用的方法将只保存到第一个元素,而不会继续。我是否在读取文件的while语句中循环? 我是否制作另一个struct或temp变量来读取文件,然后循环它来传输文件?我对此不知所措,希望能有所启发

int loadgrade(struct Student* student, FILE* file) {
    int i = 0;
    while (fscanf(file, "%d,%lf,%20[^\n]", &student->stuid, &student->grade, student->name) == 3){
        ++student;
        ++i;
    }
    return i;
}

调用
int n=loadgrade(测试,fp)

所以这有点让人困惑,因为
student
是一个指针,但是这样做的方法是这样的

fscanf(file, "%d,%lf,%20[^\n]", &(student->stuid), &(student->grade), student->name);
现在,如果要填充数组
test
,可以这样做

for (int i = 0; i < 3; i++)
   fscanf(file, "%d,%lf,%20[^\n]", &(test[i]->stuid), &(test[i]->grade), test[i]->name);
for(int i=0;i<3;i++)
fscanf(文件,“%d,%lf,%20[^\n]”,&(测试[i]->stuid),&(测试[i]->grade),测试[i]->name);

话虽如此,您需要像这样声明
test
struct Student*test[3]

既然您帮了我,我就帮您:您应该使用%20而不是%21,否则限制是无用的(空终止符字符串)。@Jean-Françoisfare这是真的。我在指定时没有考虑空终止符。请注意,您可以使用,但不需要
&student->stuid
中的参数。另一方面,如果您将
test
更改为指针数组,则现在需要分配内存。因此,最好保持原样并使用
&test[i].stuid
。我尝试按照您的答案进行操作,但最终只在文件中添加了最后一行3次,而不是全部3行。我是否将for循环放入while fscanf中?