条件语句(C ++)后推送的向量值不断变化

时间:2015-03-13 01:05:26

标签: c++

对不起伙计们,我不得不再问这个问题。我发现了关于这个问题的另一个讨论,但是海报的例子太乱了,我根本无法理解他们的谈话。

我想从字符串中读取每个字符并将这些字符逐个推送到矢量中。到目前为止,我可以做到这一切。除此之外,当在推送之前执行条件语句时,其余值会发生变化。

例如,如果它读取字符串" ABC,DEF"它将在控制台屏幕上返回," A B C。"但它将返回" A B C,D E F"如果没有条件陈述。

    std::string temporarydata; std::vector<char> datarow;
    std::ifstream inputdata (filename.c_str());

    if(inputdata.is_open())
    {
      while(getline(inputdata,temporarydata))
      {

        for(int it2=0; it2<temporarydata.length(); it2++)
        { 

          if (temporarydata[it2] != ',')
          {
            datarow.push_back(temporarydata[it2]);
            std::cout << "Temp " << it2 << " is " << temporarydata[it2] << "\n";
            std::cout << "Data Rows " << it2 << " is " << datarow[it2] << "\n";


          }
        }
      }
    }

我该怎么办?

this is the link to the rest of the code

1 个答案:

答案 0 :(得分:3)

您正在阅读vector的结尾。在索引3处,您跳过print语句,datarow有3个元素。但是,现在it2 == 3在您的下一次迭代中,这意味着您尝试在下一个打印语句中从datarow[3]读取,即使datarow只有3个元素(在索引0,1处,和2)。因此,你正在打印垃圾。你应该在循环结束后调用print语句,或者使用datarow.back()(由Neil Kirk建议)而不是你的循环控制变量。