c - 从C中的文件流中获取列数据
问题描述
我有一个用一列数据写入的文件(例如,"250\n 249\n..."
. 实际上,有 250 行数据,一行最多 15 位数字)。我希望从不同的文件中获取数据并对它们进行平均。但是,我不知道如何用单列获得如此大量的数据。我尝试了以下方法:
char str[80];\newline
FILE * abc;
abc=fopen("bromo.dat", "r");
fgets(str, 80, msd);
atof(str);
我得到的只是第一行的数据。怎么可能得到剩下的数据?
解决方案
您可以使用strtok
空格字符分隔每行中的数字。然后使用atof
您在代码中使用的函数将字符串转换为浮点数。
您应该使用二维数组来存储文件中的所有数字,并使用另一个数组来存储每行中的数字:
float number[250][15]; // maximum 250 line with at most 15 digits in each line
int number_each_line[250] = {0}; // the number of digits in each line
完整的测试程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[80];
float number[250][15];
int number_each_line[250] = {0};
FILE * fp;
fp =fopen("bromo.dat", "r");
if (!fp) {
return -1;
}
int i = 0;
while(fgets(str, 80, fp) && i < 250) {
int j = 0;
char *token = strtok(str, " ");
while(token != NULL) {
number[i][j] = atof(token);
j++;
token = strtok(NULL, " ");
}
number_each_line[i] = j;
i++;
}
// print first 10 lines in file
for(int k = 0; k < 10; k++) {
for(int j = 0; j < number_each_line[k]; j++) {
printf("%f ", number[k][j]);
}
printf("\n");
}
fclose(fp);
}
测试输出:
bromo.dat:
1.2 1 4 5
2.1 2 6 7 8
3.5 3 2 3 5.3
2.1 4 6 7 8
2.1 5 6 7 8
2.1 6 6 7 8
2.1 8 6 7 8
2.1 9 6 7 8
2.1 10 6 7 8
./test
1.200000 1.000000 4.000000 5.000000
2.100000 2.000000 6.000000 7.000000 8.000000
3.500000 3.000000 2.000000 3.000000 5.300000
2.100000 4.000000 6.000000 7.000000 8.000000
2.100000 5.000000 6.000000 7.000000 8.000000
2.100000 6.000000 6.000000 7.000000 8.000000
2.100000 8.000000 6.000000 7.000000 8.000000
2.100000 9.000000 6.000000 7.000000 8.000000
2.100000 10.000000 6.000000 7.000000 8.000000
推荐阅读
- arrays - 为什么我的数组在 React 中接收它的函数处为空?
- python - 使用一个查询跨熊猫数据框中的两列执行数学计算?
- php - 从文本文件中复制行并为 php 中的每一行创建新文件
- c# - 发布表单时如何保护隐藏的 ID
- revit-api - 从 REVIT Api 导入 gbxml
- python-3.x - 如何加快循环超过 4GB 制表符分隔的文本文件
- java - 如何找到 AWS EC2 客户端的角色?
- c - Clion 无法导入 C 文件(Makefile 未更新)
- c++ - 如何在 OOP 中正确使用 ifstream?
- autodesk-forge - Forge ARKit:无法在 Unity 中加载模型