Я пытаюсь прочитать файл и присвоить содержимое файла вектору векторов (матрицы). Проблема в том, что она, похоже, не делает то, что мне нужно. Я тоже не слишком хорошо знакомы с векторами поэтому, пожалуйста, простите любые очевидные ошибки: Pвектор, не отталкивающий назад вектор (C++)
#include <stdio.h>
#include <vector>
#include <string.h>
void readfile(const char* filename,
std::vector< std::vector<float> >& output)
{
std::vector<float> vec123(3);
char buff[80];
FILE* myfile;
myfile = fopen(filename, "r");
while(fgets(buff, sizeof(buff), myfile) != NULL) {
sscanf(buff, "%f %f %f", vec123[0], vec123[1], vec123[2]);
output.push_back(vec123);
}
fclose(myfile);
}
Вот моя главная:
int main() //yes, stdio.h, vector, "readfile" and string were included
{
std::vector< std::vector<float> > myvec;
readfile("myfile.txt", myvec); //file exists in my folder, valid
printf("%f\n", myvec[2][2]); //valid numbers for the file I'm reading
return 0;
}
Дело в том, что если он ничего не назначить myvec , printf будет segfault, но он, похоже, присваивает myvec-то, поскольку он выводит поплавок нулей независимо от того, какой действительный объект я запрашиваю у него. Я знаю простой способ сделать это без двумерной векторной суеты, но, к сожалению, мои математические библиотеки оптимизированы для матриц. MyFile содержит что-то вроде «2,2 3,14159 1,0 9,3 2,2 перевода строки 2.2 символа новой строки ...»
Почему вы используете 'stdio.h' и' string.h' в 'C++'? – enedil
Вместо использования 'char []', 'sscanf' и т. Д. Я бы рекомендовал использовать [streams] (https://stackoverflow.com/questions/15138785/c-reading-file-into-vector), это много чище и безопаснее. – CoryKramer
@Cyber Я могу попробовать, если это проблема. fopen казался лучшим решением, чем такие вещи, как thestream. –