【问题标题】:Catching (eof-)exception of istream ignore捕获 istream 忽略的 (eof-) 异常
【发布时间】: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


【解决方案1】:

在调用ignore()后查看eof()

if (f.ignore(std::numeric_limits<std::streamsize>::max(), '\n').eof()) {
    // end of file was found
}

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2015-04-14
    • 2012-08-11
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多