我正在进行一项需要我切换到 C++ 的实验,我仍在学习。我需要将文件中的数据读取到二维数组中,其中文件中的数据由浮点数组成,以矩阵格式排列。但是,数据文件中矩阵的每一行都有不同的列数,例如:
1.24 3.55 6.00 123.5
65.8 45.2 1.0
1.1 389.66 101.2 34.5 899.12 23.7 12.1
好消息是我知道文件可能具有的最大行/列数,至少现在,我并不特别担心内存优化。我想要的是有一个二维数组,其中相应的行/列与文件的行/列匹配,所有其他元素都是一些已知的“虚拟”值。
我的想法是遍历文件的每个元素(逐行),识别一行的结尾,然后开始读取下一行。不幸的是,我无法执行此操作。例如:
#include <iostream>
#include <fstream>
int main() {
const int max_rows = 100;
const int max_cols = 12;
//initialize the 2D array with a known dummy
float data[max_rows][max_cols] = {{-361}};
//prepare the file for reading
ifstream my_input_file;
my_input_file.open("file_name.dat");
int k1 = 0, k2 = 0; //the counters
while (!in.eof()) { //keep looping through until we reach the end of the file
float data_point = in.get(); //get the current element from the file
//somehow, recognize that we haven't reached the end of the line...?
data[k1][k2] = next;
//recognize that we have reached the end of the line
//in this case, reset the counters
k1 = 0;
k2=k2+1;
}
}
所以我一直无法弄清楚索引。部分问题是,虽然我知道字符“\n”标记了一行的结尾,但与文件中的浮点数相比,它的类型不同,所以我很茫然。我在想这个错误的方式吗?