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

问题描述

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

KHNU 300 12 24
雪佛臣卡500 15 32
关键绩效指标 900 13 35
戈尔斯科戈 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);
    }
}

但是,正如您可能猜到的,它不会扫描。

请让我们知道如何将信息从 .txt 扫描到结构数组的算法!

谢谢。

解决方法

我认为您的代码存在一些编译问题。您应该能够在编译代码时找到它们。我尝试修复它们,并通过修复这些修复了您的代码:

  1. malloc 返回指向已分配内存的指针,而不是指针数组。所以你的结构分配语句是这样的:
struct University *u[4] = malloc(4 * sizeof(struct University));

应该是这样的:

struct University *u = (struct University *)malloc(4 * sizeof(struct University));
  1. 当您将文件内容扫描到结构体数组中时;您使用 u[i] 访问结构数组并使用 -> 获取结构元素。但是 u[i] 解析为 struct University 而不是 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);
}