【发布时间】:2014-05-07 10:54:40
【问题描述】:
我有一个小问题。我想跳过文件中的一些行。我正在使用的自动取款机
for(int i=0; i < ln -1; ++i)
{
ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n');
}
在cplusplus.com 上写到,如果达到 eof,ignore 将抛出异常。但是我无法通过 try/catch 得到它。我做错什么了?还是我看错了什么?
我需要的是,如果达到 eof,我想再次从第一行开始进行一些操作。
所以我尝试了某事但没有成功:
for(int i=0; i < ln -1; ++i)
{
try
{
ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n');
}
catch(exception e)
{
if(ifFile.eof())
{
ifFile.clear(ifFile.eofbit);
ifFile.seekg(std::ios::beg);
_readCounter.currLine = 1;
}
}
}
但它没有遇到 catch()。
如果有任何问题,请随时提出。
更正一个:
for(int i=0; i < ln; i++)
{
if(ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n').eof())
{
ifFile.clear(ifFile.eofbit);
ifFile.seekg(std::ios::beg);
}
}
【问题讨论】:
-
你有set the exception mask(如this reference中所述)?
-
Iostream 默认不使用异常,而是有故障状态。配置 iostream 以使用异常通常不是一个好主意,这正是因为 EOF 处理。流并不是真正为使用异常报告故障而设计的。
-
但是如果忽略(应该)设置为 EOF,我怎样才能获得 eofbit? if(ifFile.eof()) 在 ifFile.ignore(...) 之后不能直接工作
标签: c++ exception try-catch eof istream