C 如何将信息从.txt扫描到结构数组?

C 如何将信息从.txt扫描到结构数组?,c,scanf,info,C,Scanf,Info,我在info.txt中有这样的信息: KHNU 300 12 24 舍甫琴卡500 15 32 KPI 900 13 35 GORSKOGO 645 14 45 我所需要的只是将这些信息写入结构数组,但作为新手,我不知道如何做到这一点。代码如下: void readFile(FILE* pf); struct University { char name[30]; int quantityOfStudents; int quantityOfFaculties; i

我在info.txt中有这样的信息:

KHNU 300 12 24
舍甫琴卡500 15 32
KPI 900 13 35
GORSKOGO 645 14 45

我所需要的只是将这些信息写入结构数组,但作为新手,我不知道如何做到这一点。代码如下:

void readFile(FILE* pf);
struct University
{
    char name[30];
    int quantityOfStudents;
    int quantityOfFaculties;
    int quantityOfDepartments;
};

int main()
{
    FILE* pf = fopen("info.txt", "rb");

    readFile(pf);
    system("pause");
    return 1;
}

void readFile(FILE* pf)
{
    if ((pf == NULL)) { printf("Error!"); exit(1); }

    struct University *u[4] = malloc(4 * sizeof(struct University));

    for (int i = 0; i < 4; i++)
    {
        fscanf(pf, "%s %d %d %d", &u[i]->name, &u[i]->quantityOfStudents, &u[i]->quantityOfFaculties, &u[i]->quantityOfDepartments);
    }
}
void readFile(文件*pf);
结构大学
{
字符名[30];
学生的智力数量;
视力的整数;
部门的内部数量;
};
int main()
{
FILE*pf=fopen(“info.txt”、“rb”);
读取文件(pf);
系统(“暂停”);
返回1;
}
无效读取文件(文件*pf)
{
如果((pf==NULL)){printf(“错误!”);退出(1);}
结构大学*u[4]=malloc(4*sizeof(结构大学));
对于(int i=0;i<4;i++)
{
fscanf(pf,“%s%d%d%d”、&u[i]->姓名、&u[i]->学生数量、&u[i]->实习人数、&u[i]->部门数量);
}
}
但是,正如您可能猜到的,它不会扫描

请告诉我如何将信息从.txt扫描到结构数组的算法!
谢谢。

我认为您的代码存在一些编译问题。您应该能够在编译代码时找到它们。我尝试修复它们,并通过修复以下内容使您的代码正常工作:

  • malloc
    返回分配内存的指针,而不是指针数组。因此,您的结构分配语句如下:
  • struct University*u[4]=malloc(4*sizeof(struct University));
    
    应该是这样的:

    struct University*u=(struct University*)malloc(4*sizeof(struct University));
    
  • 将文件内容扫描到struct数组时;您可以使用
    u[i]
    访问结构数组,并使用
    ->
    获取结构元素。但是
    u[i]
    解析为
    struct University
    而不是
    struct University*
    。我认为应该是这样的:
  • for(int i=0;i<4;i++)
    {
    fscanf(pf,“%s%d%d%d”,&u[i]。姓名,&u[i]。学生数量,&u[i]。实习人数,&u[i]。部门数量);
    }
    
    它是否编译过
    struct University*u[4]=malloc(4*sizeof(struct University))看起来非常错误。而且你事后也不会用
    u
    做任何事情,那么你怎么能声称它“不扫描”?@Eugene Sh。它不编译……那么它不是不扫描,而是不编译。首先,通过一个接一个地修复错误来编译它。看起来您已经有了读取文件的算法(读取循环中的值)。现在您需要修复代码。