在 C 中的二进制文件中写入/读取结构数组时出现问题

问题描述 投票:0回答:1

我正在尝试制作一个程序,将员工的姓名、员工编号和工资存储在数据库中,然后我必须在数据库中存储员工数量以及每个员工的所有信息(姓名、编号、工资)。我需要将信息存储在名为“EMPLOYEE.DAT”的二进制文件中。当用户输入完员工信息后,函数 PersistEmployees() 在程序末尾运行,并且是存储该信息的函数。还有另一个名为 RestoreEmployees() 的函数,我稍后将对其进行解释。这两个函数都在单独的文件中。

这里是 PersistEmployees();

void PersistEmployees(struct Employees employees[], int numOfEmployees)
{
    FILE* fout;
    fout = fopen("EMPLOYEE.DAT", "wb+");

    if (!fout)
    {
        fprintf(stderr, "Error opening file EMPLOYEE.DAT\n");
        exit(1);
    }

    fwrite(&numOfEmployees, sizeof(numOfEmployees), 1, fout);
    fwrite(employees, sizeof(struct Employees) * numOfEmployees, 1, fout);

    fclose(fout);
}

Here is a screenshot of the

然后,当程序再次运行时,将读取“EMPLOYEE.DAT”,程序获取员工数量(存储在 int 变量中)以及每个员工的信息(存储在结构体数组中)。该函数名为 RestoreEmployees,采用一个参数(一个结构体数组),并返回读取的员工数量。

这里是 RestoreEmployees();

int RestoreEmployees(struct Employees employees[])
{
    int employeesInDatabase = 0;

    FILE* fin;
    fin = fopen("EMPLOYEE.DAT", "rb+");

    if (!fin)
    {
        return 0;
    }

    fread(&employeesInDatabase, sizeof(int), 1, fin);
    fclose(fin);

    return employeesInDatabase;
}

正确返回员工数量,仅存储 1 时返回 1,存在 2 时返回 2,但结构体数组只是一堆随机字符。

这是存储信息的结构:

struct Employees
{
    int employeeNumber;
    char name[100];
    double salary;
};

我目前认为这与读取文件有关,但我不确定。请不要太严厉,因为用 c 读取和写入文件对我来说非常混乱,哈哈。

c binaryfiles fwrite fread binary-data
1个回答
0
投票

您只是不正确地调用了

fread()
fwrite()
- 您没有写入或读取具有数据的结构。请尝试这样:

fwrite(&employees, sizeof(struct Employees), 1, fout);

fread(&employees, sizeof(struct Employees), 1, fin);
© www.soinside.com 2019 - 2024. All rights reserved.