C++:std::istream 检查 EOF 而不读取/消耗 token /使用运算符>>

标签 c++ filestream iostream eof

我想测试 std::istream 是否已经到达结尾而不读取它。

我知道我可以像这样检查 EOF:

if (is >> something) 

但这有一系列的问题。想象有许多(可能是虚拟的)方法/函数期望 std::istream& 作为参数传递。 这意味着我必须做一些检查 EOF 的“家务”,可能使用不同类型的 something 变量,或者创建一些奇怪的包装器来处理调用输入法的情况.

我需要做的就是:

if (!IsEof(is)) Input(is);

IsEof 方法应保证流不会因读取而改变,因此上面的行等同于:

Input(is)

关于在Input方法中读取的数据。

如果没有通用的解决方案来表示和 std::istream,有没有办法为 std::ifstreamcin 做这个?

编辑: 换句话说,以下 assert 应该总是通过:

while (!IsEof(is)) {
  int something;
  assert(is >> something);
}

最佳答案

istream类有一个可以使用 is.eof() 成员检查的 eof 位。

编辑:所以您想查看下一个字符是否是 EOF 标记而不将其从流中删除? if (is.peek() == EOF) 可能就是您想要的。请参阅 istream::peek 的文档

关于C++:std::istream 检查 EOF 而不读取/消耗 token /使用运算符>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770754/

相关文章:

c++ - 将整数放入字符串

c++ - 嵌入式 C/C++ Atollic

c++ - 重写方法时,virtual 关键字是什么意思?

java - 具有最低和最高价格的产品(数据从文本文件中读取)

c++ - 设置系统光标大小

delphi - 在 Delphi 中如何将动态数组保存到 FileStream?

c# - SQL Server 2008 - 存储文件

c++ - 将 C 结构转换为 C++ 类

java - 使用 Java 将系统调用输出重定向到文件

c# - 将 RichTextBox 的内容写入文件