从istringstream读取字符时出现意外行为

德康

我对流的行为有疑问,请参见以下示例。我所期望的是ss_char和ss_int将是eof状态,但是只是ss_int将是eof状态。

我的问题是,为什么ss_char不处于eof状态?我不能仅使用istringstream :: get()函数来使用运算符>>,但是为什么要成功读取该值呢?

输出:
char值:
int值:42

ss_char eof:false //为什么为false?
ss_int eof:是

对不起,我英语不好。我正在努力提高我的英语水平。

#include <iostream>
#include <sstream>

int main(int /*argc*/, char const * /*argv*/[])
{
    char c;
    int num;
    std::istringstream ss_int("42");
    std::istringstream ss_char("a");

    if (ss_char >> c)
    {
        std::cout << "char value: " << c << std::endl;
    }
    else
    {
        std::cout << "cannot read char" << std::endl;
    }

    if (ss_int >> num)
    {
        std::cout << "int  value: " << num << std::endl;
    }
    else
    {
        std::cout << "cannot read int" << std::endl;
    }

    std::cout << std::endl;

    std::cout << "ss_char eof: " << std::boolalpha << ss_char.eof() << std::endl; // why false
    std::cout << "ss_int  eof: " << std::boolalpha << ss_int.eof() << std::endl;

    return 0;
}
扎斯卡

CppReference表示:“此函数仅报告由最新I / O操作设置的流状态,它不检查关联的数据源。例如,如果最新I / O是get(),则返回文件的最后一个字节eof()返回false。下一个get()无法读取任何内容并设置eofbit。只有这样,eof()才返回true。”

当读取操作尝试读取文件末尾之外的内容时,oefbit将变为true,但如果不进行进一步尝试而将其精确地读取到文件末尾,则不会变为true。当您读取char时,它知道它应该读取一个字节,因此此读取操作正常,读取位置前进1个字节,到达末尾,但是可以说流仍然没有注意到它确实是最后,如果您尝试阅读其他内容,它将成功。当您读取整数时,由于整数的长度不清楚,它会尝试读取超过42的整数,它的长度可能是42901,因此必须读取直到看到空格,行尾或最终的结尾为止。文件/流,如果没有其他要读取的内容。

而运算符>>的结果就是流本身。当将其转换为void *(或bool,取决于c ++ 11或更早版本)时,它的工作方式为!fail(),因此它告诉您读取或写入操作是否正常,无论它是否到达文件末尾(如果现在在末尾,则下一个读取操作将失败)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 stdin 读取输入参数时出现意外行为

来自分类Dev

使用strcat附加字符时出现意外行为

来自分类Dev

字符串拆分时出现意外行为?

来自分类Dev

当对文件中的字符使用迭代器时,scala中出现意外行为

来自分类Dev

熊猫:分组后跟聚合-连接字符串时出现意外行为

来自分类Dev

传递异步操作时出现意外行为

来自分类Dev

导入软件包时出现意外行为

来自分类Dev

创建字典时出现意外行为

来自分类Dev

在python中修改字典时出现意外行为

来自分类Dev

在Python中加载模块时出现意外行为

来自分类Dev

使用重定向操作时出现意外行为

来自分类Dev

从键盘读取字符串时出现意外输出

来自分类Dev

在Visual C#2010 Express中为按钮文本键入Unicode字符时出现意外行为

来自分类Dev

在ggplot上为矩形图层设置Alpha比例时出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

来自分类Dev

使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

来自分类Dev

使用“ import * as”并进行销毁时出现意外行为

来自分类Dev

在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

来自分类Dev

使用tee复制迭代器时出现意外行为

来自分类Dev

在R中匹配'+'时在pmatch中出现意外行为

来自分类Dev

制作尺寸相似的2D数组时出现意外行为

来自分类Dev

按行名索引data.frame时出现意外行为

来自分类Dev

JTable:在最后一项下单击时出现意外行为

来自分类Dev

XML到JSON-转换列表时出现意外行为?

来自分类Dev

通过MemoryStream下载生成的Excel文件时出现意外行为

来自分类Dev

在Java中使用日历类型时出现意外行为

来自分类Dev

在if()块中分配多个变量时出现意外行为

Related 相关文章

  1. 1

    从 stdin 读取输入参数时出现意外行为

  2. 2

    使用strcat附加字符时出现意外行为

  3. 3

    字符串拆分时出现意外行为?

  4. 4

    当对文件中的字符使用迭代器时,scala中出现意外行为

  5. 5

    熊猫:分组后跟聚合-连接字符串时出现意外行为

  6. 6

    传递异步操作时出现意外行为

  7. 7

    导入软件包时出现意外行为

  8. 8

    创建字典时出现意外行为

  9. 9

    在python中修改字典时出现意外行为

  10. 10

    在Python中加载模块时出现意外行为

  11. 11

    使用重定向操作时出现意外行为

  12. 12

    从键盘读取字符串时出现意外输出

  13. 13

    在Visual C#2010 Express中为按钮文本键入Unicode字符时出现意外行为

  14. 14

    在ggplot上为矩形图层设置Alpha比例时出现意外行为

  15. 15

    制作尺寸相似的2D数组时出现意外行为

  16. 16

    在R中匹配'+'时在pmatch中出现意外行为

  17. 17

    XML到JSON-转换列表时出现意外行为?

  18. 18

    使用fakeAsync(),NgModel和detectChanges()进行测试时出现意外行为

  19. 19

    使用“ import * as”并进行销毁时出现意外行为

  20. 20

    在使用sqlcmd调用的脚本中使用SET NOEXEC ON时出现意外行为

  21. 21

    使用tee复制迭代器时出现意外行为

  22. 22

    在R中匹配'+'时在pmatch中出现意外行为

  23. 23

    制作尺寸相似的2D数组时出现意外行为

  24. 24

    按行名索引data.frame时出现意外行为

  25. 25

    JTable:在最后一项下单击时出现意外行为

  26. 26

    XML到JSON-转换列表时出现意外行为?

  27. 27

    通过MemoryStream下载生成的Excel文件时出现意外行为

  28. 28

    在Java中使用日历类型时出现意外行为

  29. 29

    在if()块中分配多个变量时出现意外行为

热门标签

归档