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

reading from file to vector- last line gets repeated

本文关键字:一行 最后 读取 文件      更新时间:2023-10-16

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

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的大小必须为973(975-2个初始行)。但是大小是974,我看到最后一个值在重复。我犯了什么错误?

try:

while (getline(inFile,line))

而不是while(inFile.good())并从该方法中移除CCD_ 2调用。

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

inFile.close();
return pObs;

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