c++ - 为什么当我提取到 `char` 与提取到 `int` 时,IOStream 的 EOF 标志行为会有所不同?

标签 c++ iostream eof

最近我在我的软件中遇到了一个错误,该错误是由一个字符串流对象引起的,该对象在我预期之前设置了 EOF 标志。即使我设法找出发生了什么,我也无法找出为什么会这样。一个例子:

stringstream test ("a b");
char temp, temp2;

test >> temp >> temp2;
cout << "eof: " << test.eof() << endl;  

运行时显示:

eof: 0

这是我期望的输出。 (当我尝试再次读取内容时,我希望 stringstream 将 EOF 标志设置为 1)

但是,当我对上面的例子做一个小改动时:

stringstream test ("4 2");
int temp, temp2;

test >> temp >> temp2;
cout << "eof: " << test.eof() << endl;

输出显示:

eof: 1

为什么在这种情况下设置了 EOF 标志,而在前一种情况下却没有?

最佳答案

当您一次提取一个字符时,流无法知道已经到达 EOF,直到尝试提取一个不存在的字符。

但是,当您将格式化数据提取为类似 int 的类型时,解析器会尝试从流中提取尽可能多的字符以形成数字; “尝试提取不存在的字符”部分将作为此过程的一部分发生(实际上是最后的“迭代”),因此可以设置 EOF。

关于c++ - 为什么当我提取到 `char` 与提取到 `int` 时,IOStream 的 EOF 标志行为会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8022666/

相关文章:

c++ - 'std::function<double(double)>’ 到 ‘double (*)(double)’ 之间的转换

c++ - 面向数据的设计;如何优化 C++ 中的数据结构以提高性能?

c++ - 在 atom 中编译但不在终端中编译

c++ - 重叠计算

c - 如何从标准输入读取输入,直到 EOF 逐行读取,每行包含 C 中的四个空格分隔的整数

python - 如何将 EOF 发送到 paramiko 中的标准输入?

c++ - 在 Qt 中用几个不同的流读取同一个文件

c++ - C++ 中的 gzip 压缩文件流

c++ - 使用 boost iostream 每个连接发送多个文件

c++ - ifstream get() 不填充字符数组