C语言从txt文件中逐行读入数据存到数组中的实现方法
在C语言中,从文本文件(如`.txt`文件)中读取数据并存储到数组是一种常见的操作。这里我们将详细探讨如何实现这个过程,特别是在处理包含二维数据的文件时。 我们需要打开文件并检查是否成功打开。使用`fopen()`函数可以做到这一点,它接受两个参数:文件名和模式(读取模式为"r")。如果文件无法打开,程序会输出错误信息并返回负值。 ```c FILE *fp = fopen("2D_Jesscia_keypos.txt", "r"); if (!fp) { fprintf(stderr, "! Error: failed to open keypos file \n"); return -1; } ``` 接着,我们需要读取文件的第一行,获取数据的个数和维度。这通常是一组数字,我们可以使用`fscanf()`函数来读取它们。假设第一行格式为`numberofpoints dim ne`,我们可以这样读取: ```c int in_numberofpoints, dim, ne; char ne_char; fscanf(fp, "%d %d %c", &in_numberofpoints, &dim, &ne_char); ``` 这里的`%c`用于读取单个字符,例如分隔符或换行符。 然后,根据读取到的数据个数,动态分配足够大小的内存来存储数据。这里我们假设数据是`REAL`类型,也就是通常的`double`。因此,可以创建一个`pointlist`数组来存储数据: ```c typedef double REAL; struct Data { int numberofpoints; int dim; REAL *pointlist; }; struct Data in; in.pointlist = (REAL *)malloc(in_numberofpoints * dim * sizeof(REAL)); ``` 接下来,我们可以逐行读取文件,直到到达文件末尾。这里我们使用`fgets()`函数将一行内容读入一个字符数组`buf`中。然后,使用`sscanf()`解析`buf`中的每个数据项,将其转换成整数(`atoi()`)或浮点数(`atof()`),并存储到`pointlist`数组中。对于二维数据,每行可能包含两个数值: ```c char buf[1024]; char pt1[10], pt2[10]; for (int i = 0; i < in_numberofpoints; i++) { if (!feof(fp)) { if (fgets(buf, 1024, fp) == NULL) break; sscanf(buf, "%s %s", pt1, pt2); in.pointlist[i * dim] = atof(pt1); in.pointlist[i * dim + 1] = atof(pt2); } } ``` 注意,`feof()`应该在读取循环外部使用,因为仅在读取超出文件末尾后才会设置该标志。使用`fgets()`读取行时,确保数组`buf`足够大以容纳最长的行。`sscanf()`会将字符串解析为单独的项,并使用`atof()`将这些字符串转换为浮点数。 当读取完成后,别忘了关闭文件: ```c fclose(fp); ``` 这就是在C语言中从`.txt`文件中逐行读取数据并存入数组的基本步骤。通过这种方式,你可以灵活地处理各种格式的文本数据文件,无论数据是整型还是浮点型,一维还是多维。在实际项目中,你可能需要根据具体需求进行相应的调整,例如添加错误处理,或者优化内存分配等。
- 大南孩2021-06-09真黑啊,和搜到的能看的一模一样,不要下载
- c语言你不要过来啊2023-05-21#毫无价值
- Kido_malloc2023-04-16真无语
- 粉丝: 3
- 资源: 949
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助