2014-10-18 4 views
-2

Я пытаюсь прочитать файл и присвоить содержимое файла вектору векторов (матрицы). Проблема в том, что она, похоже, не делает то, что мне нужно. Я тоже не слишком хорошо знакомы с векторами поэтому, пожалуйста, простите любые очевидные ошибки: 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 символа новой строки ...»

+0

Почему вы используете 'stdio.h' и' string.h' в 'C++'? – enedil

+1

Вместо использования 'char []', 'sscanf' и т. Д. Я бы рекомендовал использовать [streams] (https://stackoverflow.com/questions/15138785/c-reading-file-into-vector), это много чище и безопаснее. – CoryKramer

+0

@Cyber ​​Я могу попробовать, если это проблема. fopen казался лучшим решением, чем такие вещи, как thestream. –

ответ

1

Оно должно быть:

sscanf(buff, "%f %f %f", &vec123[0], &vec123[1], &vec123[2]); 

Поскольку sscanf принимает указатель в качестве параметра.

+0

Ах, забыл, что они были поплавками, а не char * s. Хотя, даже если я изменил свой код, он все равно не назначил правильные параметры из моего файла моему вектору –

Смежные вопросы