// 保存记录到文件 void saveEmployeeRecords() { FILE *fp; fp = fopen("employee.dat", "wb"); if (fp == NULL) { printf("文件打开失败\n"); return; } fwrite(&employeeCount, sizeof(int), 1, fp); fwrite(employeeList, sizeof(Employee), employeeCount, fp); fclose(fp); printf("员工绩效记录已保存到文件\n"); } // 从文件中读取员工绩效记录,并放入员工绩效数组 void loadEmployeeRecords() { FILE *fp; fp = fopen("employee.dat", "rb"); if (fp == NULL) { printf("文件打开失败\n"); return; } fread(&employeeCount, sizeof(int), 1, fp); employeeList = (Employee*)malloc(sizeof(Employee) * employeeCount); fread(employeeList, sizeof(Employee), employeeCount, fp); fclose(fp); printf("员工绩效记录已加载\n"); 找到并解决保存文件后读取文件是乱码的问题,采用顺序表结构
时间: 2024-01-14 19:05:20 浏览: 68
dat.zip_.dat_DAT_MATLAB dat _dat文件
这段代码中的问题主要是在保存和读取员工记录时,没有考虑顺序表结构的特点,导致数据读取时出现乱码问题。
解决方案可以使用如下代码:
```c
// 员工绩效数组结构体定义
typedef struct {
char name[20]; // 员工姓名
float performance; // 绩效评分
} Employee;
// 员工绩效顺序表结构体定义
typedef struct {
Employee* data; // 员工绩效数组指针
int length; // 员工绩效数组长度
int maxSize; // 员工绩效数组最大长度
} EmployeeList;
// 保存记录到文件
void saveEmployeeRecords(EmployeeList* list) {
FILE *fp;
fp = fopen("employee.dat", "wb");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
fwrite(&list->length, sizeof(int), 1, fp);
fwrite(list->data, sizeof(Employee), list->length, fp);
fclose(fp);
printf("员工绩效记录已保存到文件\n");
}
// 从文件中读取员工绩效记录,并放入员工绩效数组
EmployeeList* loadEmployeeRecords() {
FILE *fp;
fp = fopen("employee.dat", "rb");
if (fp == NULL) {
printf("文件打开失败\n");
return NULL;
}
int length;
fread(&length, sizeof(int), 1, fp);
Employee* data = (Employee*)malloc(sizeof(Employee) * length);
fread(data, sizeof(Employee), length, fp);
fclose(fp);
printf("员工绩效记录已加载\n");
EmployeeList* list = (EmployeeList*)malloc(sizeof(EmployeeList));
list->data = data;
list->length = length;
list->maxSize = length;
return list;
}
```
在这个解决方案中,我们将员工绩效数组改为顺序表结构,即使用一个包含指针、长度和最大长度三个成员的结构体来代表员工绩效数组。在保存和读取员工记录时,我们分别使用了 `fwrite()` 和 `fread()` 函数,并且在写入文件时先写入数组长度,以便在读取文件时先读取数组长度,从而正确地读取数据。
需要注意的是,在读取文件时需要先动态分配一个合适长度的数组存储读取到的数据,并且在返回时将这个数组包装成一个顺序表结构体一起返回。在使用完这个结构体后,需要手动释放其指针成员所指向的内存空间,以免内存泄漏。
阅读全文