从文件读取到矢量-最后一行重复
reading from file to vector- last line gets repeated
我正在尝试将文件中的值读取到矢量
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
循环的范围中并检查空字符串应该可以纠正这个问题。
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 读取最后一行代码算法 - c++ 时出现问题
- 这段代码的最后一行在做什么?
- 我没有得到产量最低的产品.我该如何纠正它?最后一行是最低销售产品的输出.谢谢
- 丢失读入的每一行输入中的最后一个令牌
- 如何只阅读最后一行的开头?
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- Codelite构建仅呈现最后一行的输出
- 以下递归程序的最后一行是如何工作的
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 如何有效地读取C 中的最后一行文件
- 标准输入未读取最后一行
- 特征:将每一行除以最后一行
- cout 用于仅打印最后一行的 2D 字符串矢量
- 如何确定输入文件中的一行是否是最后一行?C++
- 多功能阵列最后一行相同的结果
- 为什么输入文件的最后一行运行两次?
- Fscanf 未从文件的最后一行 (C/C++) 读取预期值
- C++ - 将数字表从文件读取到 2D 数组中(仅存储最后一行)
- 在一行最后一个单词之后立即退出While循环