#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_LINE_LEN 1024 #define MAX_DATA_POINTS 1024 enum { SENSOR_TYPE_YULV = 0, SENSOR_TYPE_DIANDAO, SENSOR_TYPE_PH, SENSOR_TYPE_ORP, SENSOR_TYPE_ZHOUDU, NUM_SENSOR_TYPES }; typedef struct { int point_id; int sensor_type; float value; } data_point_t; data_point_t data_points[MAX_DATA_POINTS]; int num_data_points = 0; char *sensor_type_names[NUM_SENSOR_TYPES] = { "余氯", "电导率", "PH", "ORP", "浊度" }; void save_data_points() { FILE *fp = fopen("C:\\Users\\pc\\Desktop\\test.txt", "w"); if (fp == NULL) { printf("保存数据失败\n"); return; } fprintf(fp, "检测点 传感器 数值\n"); for (int i = 0; i < num_data_points; i++) { data_point_t *p = &data_points[i]; fprintf(fp, "%d (%d) %.2f\n", p->point_id, p->sensor_type, p->value); } fclose(fp); printf("数据已保存\n"); } void load_data_points() { FILE *fp = fopen("C:\\Users\\pc\\Desktop\\test.txt", "r"); if (fp == NULL) { printf("没有找到数据文件\n"); return; } char line[MAX_LINE_LEN]; while (fgets(line, MAX_LINE_LEN, fp) != NULL) { char *fields[3]; int num_fields = 0; char *tok = strtok(line, ","); while (tok != NULL) { fields[num_fields++] = tok; tok = strtok(NULL, ","); } if (num_fields != 3) { printf("数据文件格式错误\n"); fclose(fp); return; } int point_id = atoi(fields[0]); int sensor_type = atoi(fields[1]); float value = atof(fields[2]); data_point_t *p = &data_points[num_data_points++]; p->point_id = point_id; p->sensor_type = sensor_type; p->value = value; } fclose(fp); printf("数据已加载,共%d条\n", num_data_points); }
时间: 2023-07-16 19:11:44 浏览: 213
这段代码是一个简单的数据点存储和读取程序。它定义了一个结构体`data_point_t`来存储每个数据点的点ID、传感器类型和数值,并定义了一个全局数组`data_points`来存储所有数据点。此外,还定义了一个字符串数组`sensor_type_names`来存储传感器类型的名称。
`save_data_points`函数将所有数据点写入文本文件,以便以后读取。`load_data_points`函数读取文本文件中的所有数据点,并将它们存储在全局数组`data_points`中。
这个程序使用了标准C库函数`fopen`,`fclose`,`fgets`和`fprintf`来打开、关闭、读取和写入文件。它也使用了字符串处理函数`strtok`,`atoi`和`atof`来解析文件中的行和字段。
相关问题
解释下列代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <time.h> #define FF "graph.txt"
这段代码是C/C++的预处理指令,用于包含头文件和定义一个常量。
具体来说,这段代码包含了五个头文件:<stdio.h>、<stdlib.h>、<string.h>、<malloc.h>和<time.h>,这些头文件包含了一些在程序中常用的函数和类型定义,例如输入输出函数(如printf、scanf)、内存分配函数(如malloc、free)、字符串处理函数(如strcpy、strlen)等等,程序中需要用到这些函数时可以直接调用。
此外,这段代码还定义了一个常量FF,其值为"graph.txt"。这个常量在程序中可以被使用,例如可以用它作为文件名来读取一个文本文件,具体实现可以看到代码的其他部分。
总之,这段代码为程序提供了一些常用的函数和类型定义,并定义了一个常量,方便程序中的其他部分使用。
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #define TRUE 1 #define FALS
这个代码片段包含了几个常用的 C 语言库头文件和定义:
1. `#include<stdio.h>`: 这个头文件包含了标准输入输出功能,如 printf(), scanf() 等,用于处理用户输入和输出。
2. `#include<stdlib.h>`: 这个头文件提供了内存管理功能,如 malloc(), free(), exit() 等,用于动态分配内存和程序退出。
3. `#include<math.h>`: 此头文件提供了数学运算相关的函数,如 pow() 用于计算幂次,sin(), cos() 等用于三角函数。
4. `#include<string.h>`: 这个头文件包含了字符串处理函数,如 strlen(), strcpy(), strcat(), strcmp() 等,用于操作字符串。
5. `#define TRUE 1` 和 `#define FALSE 0`: 这是一个简单的宏定义,将布尔值 TRUE 定义为整数 1,FALSE 定义为 0,这是一种常见的将逻辑值转化为数值表示的方法。
使用这些头文件后,你可以在代码中调用这些库中的函数,进行基本的数据输入、输出、数学运算以及字符串操作。相关问题:
阅读全文