用于读取文件的输入循环

时间:2016-06-02 17:18:16

标签: c++ file loops input

我是编程的初学者,我需要帮助我的书中提供的这段代码。

for (My_type var; ist >> var;) { // read until end of file 
// maybe check that var is valid 
// do something with var

}

if (ist.fail()) {
ist.clear(); 
char ch; 
// the error function is created into the book : 
if (!(ist >> ch && ch == '|')) error("Bad termination of input\n"); 

}
// carry on : we found end of file or terminator

此示例是关于从文件中读取值。我试图使用它,但我在理解它是如何工作方面遇到了一些麻烦:

  1. 如果我尝试在循环后测试流状态,我同时获得eoffail状态,那怎么可能呢?如何避免触发faileof

  2. 什么时候触发EOF?从我的测试开始,当我到达序列的最后一个值时,它似乎被触发了,这个定义是否正确?

  3. 谢谢。

1 个答案:

答案 0 :(得分:4)

  

如果我尝试在循环后测试流状态,我会得到eof和fail状态,那怎么可能呢?如何避免触发失败和eof?

如果有一个字符无法转换为My_type,则该字符可能是该文件中的最后一个字符。然后,failbiteofbit将被设置。

  

何时触发EOF?从我的测试开始,当我到达序列的最后一个值时,似乎是触发了,这个定义是否正确?

是的,eofbit在读取最后一个字符时设置。

引自std::basic_istream

  

如果满足以下条件之一,则提取将停止:

     
      
  • 在输入序列上发生文件结束;

  •   
  • 在输出序列中插入失败(在这种情况下,不会提取要插入的字符);

  •   
  • 发生异常(在这种情况下会捕获异常,并且只有在例外()中启用了failbit时才会重新抛出。)

  •