查找文件流的结尾
finding the end of a filestream
我正在尝试通过在自定义类客户中重载运算符>>()函数,将文本文件中的标记化数据读取到指针向量中。 我的代码可以很好地读取整个文件,但是完成后我遇到了SEG错误
这是我的代码:
int line = 0;
vector<Customer *> customers;
ifstream fin("customers.txt", ios_base::in);
while (fin)
{
Customer *temp = new Customer();
line++;
try
{
fin >> *temp;
customers.push_back(temp);
}
catch(boost::bad_lexical_cast&)
{
cerr << "Bad data found at line " << line
<< " in file customers.txt" << endl;
}
}
假设重载运算符>>() 函数使用 getline() 读取一行并将数据插入到指向 Customer 的临时指针中,如果发现任何无效数据,则抛出bad_lexical_cast。
我意识到我可以改变:
while (fin)
自:
while (fin >> *temp)
但是我想保留 try/catch 块,因为如果发现错误数据,我只想让它跳过该行并继续下一行。
我能做些什么来测试下一行是否存在而不实际拉动它? 类似于 scanner 类中的 Java hasNextLine?
任何帮助将不胜感激
您必须检查 fin >> *temp
的输出。如果读取失败(即文件结尾),则返回false
。
您可以将该行更改为:
if(!(fin >> *temp)) break;
(有关类似问题/问题的答案,另请参阅此处。
相关文章:
- 在C++中使用 freopen 时如何检测文件结尾?
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- 如何在图像位中设置标志以标记音频文件的结尾
- 如何在C++中打开以特定扩展名结尾的文件
- 如何将EOF(文件结尾)放入代码::块中?
- 用 OpenCV 以文件结尾分隔
- 将头文件(.h)放在另一个文件(.h或.cpp)的开头和结尾之间的区别
- 超级强大的API-超级强大的Decoder::decode未为文件结尾返回0
- 处理导致核心转储的文件结尾错误
- 我对文件结尾感到困惑
- 如何检查 ifstream 是否是 C++ 中文件的结尾
- 如何在文件末尾(或结尾之前)读取字符
- C++ lcov 到达了意外的文件结尾
- 如何检测 C++ 中字符串输入的文件结尾
- 意外的文件结尾(可视形式)
- 查找文件流的结尾
- [C++]检查文件结尾
- 如何处理CSV文件中多个可能的文件结尾
- 致命错误C1004:发现意外的文件结尾