我正在尝试制作一个程序,将员工的姓名、员工编号和工资存储在数据库中,然后我必须在数据库中存储员工数量以及每个员工的所有信息(姓名、编号、工资)。我需要将信息存储在名为“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);
}
然后,当程序再次运行时,将读取“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 读取和写入文件对我来说非常混乱,哈哈。
您只是不正确地调用了
fread()
和 fwrite()
- 您没有写入或读取具有数据的结构。请尝试这样:
fwrite(&employees, sizeof(struct Employees), 1, fout);
fread(&employees, sizeof(struct Employees), 1, fin);