2012-04-30 3 views
0

У меня есть std::vector<std::string> WorldData. Она содержит каждую строку моего файла под названием world.txt (есть OpenGL 3D увязка) это выглядит следующим образом:Текст из файла для поплавка

-3.0 0.0 -3.0 0.0 6.0 
-3.0 0.0 3.0 0.0 0.0 
3.0 0.0 3.0 6.0 0.0 etc. 

Как я мог преобразовать эти строки плавать переменные? Когда я попытался:

scanf(WorldData[i].c_str(), "%f %f %f %f %f", &x, &y, &z, &tX, &tY); 
or 
scanf(WorldData[i].c_str(), "%f %f %f %f %f\n", &x, &y, &z, &tX, &tY); 

переменных х, у, г, Те, TY получить некоторые странные цифры.

+4

Вы действительно использовали s КАНФ? Вы должны использовать sscanf, если вы читаете строку. – happydave

+0

omg я этого не видел, думаю, пора спать: P спасибо большое – fex

ответ

3

Используйте sstream:

std::istringstream iss(WorldData[i]); 
iss >> x >> y >> z >> tX >> tY; 
+0

Это должно быть 'std :: istringstream iss; msgstr "если вы хотите избежать ненужного дублирования данных внутри' WorldData [i] '. – ildjarn

9

Вместо того, чтобы читать из файла в вектор, а затем из вектора в координатах, я прочитал координату непосредственно из файла:

struct coord { 
    double x, y, z, tX, tY; 
}; 

std::istream &operator>>(std::istream &is, coord &c) { 
    return is >> c.x >> c.y >> c.z >> c.tX >> c.tY; 
} 

Затем вы можете создать вектор координат с помощью istream_iterator:

std::ifstream in("world.txt"); 

// initialize vector of coords from file: 
std::vector<coord> coords((std::istream_iterator<coord>(in)), 
          std::istream_iterator<coord>()); 
Смежные вопросы