我是编程的初学者,我需要帮助我的书中提供的这段代码。
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
此示例是关于从文件中读取值。我试图使用它,但我在理解它是如何工作方面遇到了一些麻烦:
如果我尝试在循环后测试流状态,我同时获得eof
和fail
状态,那怎么可能呢?如何避免触发fail
和eof
?
什么时候触发EOF?从我的测试开始,当我到达序列的最后一个值时,它似乎被触发了,这个定义是否正确?
谢谢。
答案 0 :(得分:4)
如果我尝试在循环后测试流状态,我会得到eof和fail状态,那怎么可能呢?如何避免触发失败和eof?
如果有一个字符无法转换为My_type
,则该字符可能是该文件中的最后一个字符。然后,failbit
和eofbit
将被设置。
何时触发EOF?从我的测试开始,当我到达序列的最后一个值时,似乎是触发了,这个定义是否正确?
是的,eofbit
在读取最后一个字符时设置。
如果满足以下条件之一,则提取将停止:
在输入序列上发生文件结束;
在输出序列中插入失败(在这种情况下,不会提取要插入的字符);
发生异常(在这种情况下会捕获异常,并且只有在例外()中启用了failbit时才会重新抛出。)