1

我正在尝试将值从文件读取到向量

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,我看到最后一个值是重复的。我犯了什么错误?

4

2 回答 2

4

尝试:

while (getline(inFile,line))

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

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

inFile.close();
return pObs;
于 2013-08-14T21:51:18.127 回答
0

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

于 2013-08-14T21:53:26.003 回答