用于读取文件的输入循环
An input loop for reading a file
我是一名编程初学者,我需要在书中介绍的这段代码上得到帮助。
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 inputn");
}
// carry on : we found end of file or terminator
此示例是关于从文件中读取值的。我试过使用它,但在理解它的工作原理时遇到了一些麻烦:
如果我在循环后尝试测试流状态,我会得到
eof
和fail
状态,这怎么可能?如何避免同时触发fail
和eof
?EOF究竟是什么时候触发的?从我的测试来看,当我达到序列的最后一个值时,它似乎被触发了,这个定义正确吗?
谢谢。
如果我试图在循环后测试流状态,我会得到eof和fail状态,这怎么可能?如何避免同时触发fail和eof?
如果有一个字符无法转换为My_type
,并且该字符是文件中的最后一个字符,则可能发生这种情况。然后,将设置failbit
和eofbit
。
EOF究竟何时触发?从我的测试来看,当我达到序列的最后一个值时,它似乎被触发了,这个定义正确吗?
是的,读取最后一个字符时会设置eofbit
。
引用std::basic_istream
:
如果满足以下条件之一,提取将停止:
文件结尾出现在输入序列上;
在输出序列中插入失败(在这种情况下,不提取要插入的字符);
发生异常(在这种情况下,异常被捕获,只有在exceptions()中启用了failbit时才会重新抛出)。
相关文章:
- 正在尝试了解输入验证循环
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 通过for循环使用用户输入填充列表
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 使用输入打破 OpenMP 中的循环
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 偶尔多次请求用户输入循环
- 如何用字符终止整数输入循环?
- CIN 到矢量输入循环无限期.为什么
- 结构卡在输入循环中的函数
- C++Visual Studio 2017中,无法输入循环中的变量
- 用于读取文件的输入循环
- C++ 文件输入循环的困难
- 输入循环 while 函数
- 巧克力游戏:输入循环,不插入循环或打印游戏统计数据
- 使用自动输入循环错误"auto must have an initializer"
- 通过用户输入循环的更好方法
- Scala/ c++:尾部递归函数代替输入循环