文件异常和光标移动c ++

时间:2015-12-12 23:29:43

标签: c++ exception-handling ifstream cursor-position

我在从文件读取时使用异常处理来确定我希望存储在变量中的部分是否具有正确的类型(例如,我不想将字符串存储在double变量中),但是当发生异常时,光标不会转到下一行。有没有办法这样做?

1 个答案:

答案 0 :(得分:0)

如果输入错误/失败有enabled exception,输入流中的第一个错误字符将引发异常。

如果您的错误处理包括跳过剩余的行以继续处理下一行,则必须clear错误状态,然后ignore行的未读字符。在您的异常处理代码中添加以下内容:

InputFile.clear(); // without this, every subsequent file op would fail 
InputFile.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

但是,您应该注意,因为从流中读取>>也可能会跳过换行符,因此缺少的数据可能会使您已经在下一行。更安全的方法是逐行读取流std::getline()并使用stringstream 解析每一行。