【问题标题】:file exception and cursor movement c++文件异常和光标移动 C++
【发布时间】:2015-12-12 23:29:42
【问题描述】:

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

【问题讨论】:

  • 光标是指文件中的位置?还是屏幕上的光标?
  • 文件中的位置!

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


【解决方案1】:

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

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

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

但是你应该小心,因为&gt;&gt; 从流中读取也可能会跳过换行符,因此丢失的数据可能会将你定位在下一行。更安全的方法是使用std::getline() 逐行读取流,并使用stringstream 解析每一行。

【讨论】:

  • 这行不通。 if(!(InputFile>> 薪水)){ InputFile.ignore(std::numeric_limits<:streamsize>::max(),'\n');扔myex;这是我指的代码...
  • 您能否展示代码的相关部分:并解释是什么让您认为代码丢失了?
  • 对不起,我知道你没有清除错误...我会编辑
  • 每当我创建一个对象(比如说 test(myfile))并且在文件中我有一个字符串在它应该是双精度的地方时,它都会捕获异常,但是所有的跟随对象,即使我从文件中读取的“参数”格式正确。
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多