Я работаю над экспериментом, который требует от меня перехода на C ++, который я все еще изучаю.Мне нужно прочитать данные из файла в 2D-массив, где данные в файле состоят из чисел с плавающей запятой, расположенных в матричном формате.Однако каждая строка матрицы в файле данных имеет различное количество столбцов, например:
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" обозначает конец строки, он имеет другой тип по сравнению с числами с плавающей запятой в файле, и поэтому я в растерянности.Я думаю об этом неправильно?