【问题标题】:c++ sstream,reading different amount of variables per linec ++ sstream,每行读取不同数量的变量
【发布时间】:2014-04-28 02:17:57
【问题描述】:

我正在尝试读取每行具有不同数量变量的文本文件,并使用 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 个变量的行。

【问题讨论】:

    标签: c++ sstream


    【解决方案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;
          }
     }
    

    【讨论】:

      【解决方案2】:

      使用>> 推进流,因此它将改变对>> 的下一次调用所做的事情。如果第一个 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;
            }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2019-11-06
        • 2013-02-12
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多