我正在尝试读取每行上包含不同变量的文本文件,并使用sstream将正确的值设置为矢量。
/*Example file
"f 1 2 3"
"f 4 5 6 7" */
ifstream infile(file);
string line;
char a;
int i=0;v,x,y,z;
while(getline(infile,line))
{
istringstream iss(line)
if(line[0]=='f')
{
if(iss>> a >> v >> x >> y)
{
poly[i].face[0]=v;
poly[i].face[1]=x;
poly[i].face[2]=y;
poly[i].four=false;
}
else if(iss>> a >> v >> x >> y >> z) //this doesn't seem to get called, ever.
{
poly[i].face[0]=v;
poly[i].face[1]=x;
poly[i].face[2]=y;
poly[i].face[3]=z;
poly[i].four=true;
}
poly.push_back(Poly());
i++;
}
}
代码适用于包含3个变量的行,但不适用于包含4个变量的行。
答案 0 :(得分:1)
这是因为第一批输入已成功读取这些变量,并且从未到达else
部分。由于行的开头始终是相同的,就像存储这些值一样,您可以这样做:
if(iss >> a >> v >> x >> y)
{
poly[i].face[0]=v;
poly[i].face[1]=x;
poly[i].face[2]=y;
poly[i].four=false;
if(iss >> z)
{
poly[i].face[3]=z;
poly[i].four=true;
}
}
答案 1 :(得分:0)
使用>>
推进流,因此它会更改下一次>>
调用的内容。如果第一个if(...)
失败,则会修改流iss
,以便else if (...)
也失败。
相反,你可以这样做:
if(iss >> a >> v >> x >> y)
{
poly[i].face[0]=v;
poly[i].face[1]=x;
poly[i].face[2]=y;
if (iss >> z) // if we can read the fourth value...
{
poly[i].face[3]=z;
poly[i].four=true;
}
else
{
poly[i].four=false;
}
}