typedef struct point_record {// 监测点每次记录的数据结构体 char point_name[100]; // 监测点名称 float residual_chlorine; // 余氯值 float conductivity; // 电导率 float ph; // pH值 float orp; // ORP值 float turbidity; // 浊度值 char time[100]; //时间 } point_record; typedef struct point_set { //监测点集合的数据结构体 int num_points; //当前点集合中实际包含的点的数量 point_record data[MAX_POINTS];//data 表示点的记录数组,最多能够容纳 MAX_POINTS 个点 } point_set; void save_data(struct point_set data) { FILE* fp; fp = fopen("water_quality_data.txt", "w"); if (fp == NULL) { printf("保存文件失败!\n"); return; } fprintf(fp, &data, sizeof(point_set), 1, fp); fclose(fp);} void load_data(struct point_set* data) { FILE* fp; fp = fopen("water_quality_data.txt", "r+"); if (fp == NULL) { return; } fread(data, sizeof(point_set), 1, fp); fclose(fp); }如何修改以上代码
时间: 2023-12-03 20:46:55 浏览: 81
以上代码存在一些问题,需要进行修改:
1. 在函数 save_data 中,参数应该传入 point_set 指针而不是结构体。因为结构体传参会导致整个结构体被复制一遍,浪费空间和时间。
2. 在函数 save_data 中,应该使用 fwrite 函数将数据写入文件。fprintf 函数只能输出格式化字符串,不能将结构体写入文件。
3. 在函数 load_data 中,应该使用 fread 函数将文件中的数据读入到指向 point_set 结构体的指针中。
修改后的代码如下:
```c
typedef struct point_record {
char point_name[100]; // 监测点名称
float residual_chlorine; // 余氯值
float conductivity; // 电导率
float ph; // pH值
float orp; // ORP值
float turbidity; // 浊度值
char time[100]; // 时间
} point_record;
typedef struct point_set { //监测点集合的数据结构体
int num_points; //当前点集合中实际包含的点的数量
point_record data[MAX_POINTS];//data 表示点的记录数组,最多能够容纳 MAX_POINTS 个点
} point_set;
void save_data(point_set* data) {
FILE* fp;
fp = fopen("water_quality_data.txt", "wb");
if (fp == NULL) {
printf("保存文件失败!\n");
return;
}
fwrite(data, sizeof(point_set), 1, fp);
fclose(fp);
}
void load_data(point_set* data) {
FILE* fp;
fp = fopen("water_quality_data.txt", "rb");
if (fp == NULL) {
return;
}
fread(data, sizeof(point_set), 1, fp);
fclose(fp);
}
```
阅读全文