我正在尝试将文件中的值读取到矢量
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,我看到最后一个值正在重复。我犯了什么错误?
答案 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
循环的范围并检查并清空字符串应该可以解决问题。