从ifstream文件读取时给出了错误的大小
reading from ifstream file gives wrong size
我有一个.txt文件,其中包含6291456个数字,没有其他内容。在将全部读出和push_back
读入矢量后,vector.size()
函数返回6291457。这个附加元素是从哪里来的?
int disparity;
ifstream disparity_txt;
disparity_txt.open(path);
while(!disparity_txt.eof())
{
disparity_txt >> disparity;
vec_disparities.push_back(disparity);
}
cout << vec_disparities.size() << endl;
disparity_txt.close();
不要使用while(!disparity_txt.eof())
,它不会按照您的想法执行(eof
只有在读取流的末尾后才会设置,所以通常最后一次迭代是错误的):
Do:
while(disparity_txt >> disparity)
{
vec_disparities.push_back(disparity);
}
使用while (!in.eof())
几乎总是错误的
从流中提取数字失败时停止循环(如quantdev的回答所示),或者使用标准库工具从流中填充容器:
std::ifstream disparity_txt(path);
vec_disparities.assign(std::istream_iterator<int>(disparity_txt),
std::istream_iterator<int>());
您可以使用其构造函数打开fstream,析构函数将关闭它,不需要显式的open
和close
调用。
在C++11中,它甚至更简单:
vec_disparities.assign(std::istream_iterator<int>{std::ifstream{path}}, {});
相关文章:
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 尝试打开 ifstream 时出现"Incomplete type"错误
- C++ ifstream 错误:无法读取数据
- 为什么当 ifstream 创建从键盘读取字符串的文件时出现错误
- 严重性代码说明项目文件行抑制状态错误 C2676 二进制">>":"std::ifstream"
- C 使用字符串作为打开文件路径的ifstream错误
- ifstream* 分段错误
- Typo:bool to int conversion诱导的std :: ifstream在Linux下的错误
- 错误:"file" 之前的预期初始值设定项,包括 ifstream。
- 对ifstream对象调用close时出现分段错误
- C - 简单的ifstream错误
- G++ ifstream 匹配错误
- C++ ifstream 类型错误
- ifstream::eof在if语句中时抛出类型错误
- ifstream在文件中获取错误的字符串
- 检查ifstream,错误后不起作用?
- 尝试将数据保存到数组中时出现ifstream运行时错误
- 在这种情况下,如何正确使用ifstream的引用?错误C2248
- 使用字符串作为打开文件路径时出现ifstream错误
- 使用.open()成员函数C++的ifstream数组的错误访问代码