从文件读取到矢量 - 最后一行重复

时间:2013-08-14 21:46:05

标签: c++

我正在尝试将文件中的值读取到矢量

std::vector<float> setTimesArray (std::string flName){
    int i=0, dummy=0;
    float temp;
    std::vector<float> pObs;
    std::string line;
    std::ifstream inFile;
    inFile.open(flName.c_str());
    if(!inFile){
        std::cout<<"\n.obs file not valid. Quitting programme...";
        exit(1);
    }
    while(inFile.good()){
        i++;
        getline(inFile, line);
        if(i>=3){ //I don't want first two lines
            std::istringstream in(line);
            in>>dummy;//discards first value in the line
            in>>temp;
            pObs.push_back(temp);
            in.str(""); //discards remaining part of the line
        }        

    }
    return pObs;
    inFile.close();    
}

问题是,最后一个值会重复出现。例如,flName总共有975行。因此,pObs必须具有size = 973(975-2初始行)。但是大小是974,我看到最后一个值正在重复。我犯了什么错误?

2 个答案:

答案 0 :(得分:4)

尝试:

while (getline(inFile,line))

而不是while(inFile.good()) 并从方法中删除getline()来电。

根据Daniel Kamil Kozar的建议,您可能还想更改最后两行代码:

inFile.close();
return pObs;

答案 1 :(得分:0)

在最后一行之后,仍然允许good()返回true。在读取失败之前, 不会返回false。因此,如果它返回true,然后读取失败,则您的line变量将不会获取新值。正确的解决方案可能是更正边界检查,但在这种情况下,将line的声明移动到while循环的范围并检查并清空字符串应该可以解决问题。