也許你正在使用sscanf的一個很好的理由,但至少我認爲是很好的點,你可以使用流將信息加載到結構中。
在這種情況下,我建議你使用istringstream類,它可以讓你從字符串中讀取值作爲值,根據需要進行轉換。所以,你的代碼,我想我可以把它改成這樣:
std::string one = "v 100.32 12321.232 3232.6542";
struct Face {float x,y,z;};
std::vector<struct Face>obj;
char space[3];
// As mentioned previously, create a temporal Face variable to load the info
struct Face tmp; // The "struct" maybe can be omited, I prefer to place it.
// Create istringstream, giving it the "one" variable as buffer for read.
istringstream iss (one);
// Replace this line...
//sscanf(one.c_str(), "%s %f %f %f",space,&obj[1].x1,&obj[1].y1,&obj[1].z1);
// With this:
iss >> space >> tmp.x >> tmp.y >> tmp.z;
// Add the temporal Face into the vector
obj.push_back (tmp);
// As mentioned above, the first element in a vector is zero, not one
std::cout << obj[0].x1 << std::endl;
的istringstream類(你需要包括「sstream」)是在這個情況下是有用的,當你有值從字符串加載。
我希望我的回答能以任何方式幫助你。
你錯過了'main'和'obj [whatever]'是非法的,因爲最初,因爲代碼是矢量是空的。 –
@LuchianGrigore但是sscanf不向矢量添加東西? – BlueSpud
不,當然不是。你需要'調整大小',給構造函數一個初始大小,或者使用'push_back'。 –