c++:流输出操作成功但状态不好

标签 c++ stringstream

我正在尝试了解有关流状态的更多信息并阅读 here如果流上最近的 I/O 操作成功完成,则 good() 返回 true。我已经尝试遵循,如果我理解正确的话,这与上述声明背道而驰

#include <iostream>
#include <sstream>


int main() {

    std::stringstream ss;
    int x;

    ss << "42";
    ss >> x;

    std::cout << x << std::endl; // prints 42 as expected
    std::cout << ss.good() << std::endl; // prints 0, expected 1

    return 0;
}

有人可以澄清为什么即使最后一次(输出)操作成功,流状态也不好吗?谢谢

最佳答案

直到下一次提取文件流才设置 EOF 的原因不是因为文件/字符串流之间的行为有任何差异,而是因为许多文本编辑器偷偷地在文件末尾插入换行符。尝试创建一个包含以下内容的文本文件:

a
b

然后用 od -c 之类的东西检查它,你可能会看到:

0000000   a  \n   b  \n
0000004

注意 b 之后偷偷摸摸的换行符。如果您在字符串流的末尾插入一个换行符,您应该观察到相同的行为。

关于c++:流输出操作成功但状态不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44865841/

相关文章:

c++ - 如何重构 C++ 代码以支持动态数组大小

c++ - 返回从常量指针 vector 生成的指针的函数

c++ - 如何只计算字符串中的整数

c++ 使用单行 m.swap(std::stringstream()); 清除字符串流?

c++ - 为什么 GCC 不允许我创建 `inline static std::stringstream` ?

c++ - 使用进位标志的高效 128 位加法

c++ - 在填充十六进制和一些转换方面需要帮助

c++ - 如果也有静态成员,如何对类的成员进行排序?

c++ - 如何从 stringstream 中提取 double

c++ stack stringstream函数返回整数与ASCII