分享
三行代码  ›  专栏  ›  技术社区  ›  AlwaysLearning

当getline在新行之前不读取时会发生什么情况?[副本]

  •  0
  • AlwaysLearning  · 技术社区  · 5 天前

    我看过不少相关帖子,但没有得到以下问题的答案。

    考虑:

    char buffer[4];
    cin.getline(buffer, 4);
    cout << buffer << endl;
    cin.getline(buffer, 4);
    cout << buffer << endl;
    

    abc 输入时,我有机会输入第二行,这两行在输出中都正确显示。但是,如果我进入 abcd

    1 回复  |  直到 5 天前
        1
  •  3
  •   Toby Speight Григорий Шуренков    5 天前

    我们看到了 std::basic_istream<CharT,Traits>::getline()

    提取字符[…]直到

    • 文件结束条件出现在输入序列中(在这种情况下 setstate(eofbit) 执行)

    • c 是分隔符,由 Traits::eq(c, delim) . 将提取分隔符(与 basic_istream::get() )并指望 gcount()

    • count-1 已提取字符(在这种情况下 setstate(failbit) 执行)。

    如果函数不提取字符(例如 count < 1 设置状态(故障位) 被处决。

    无论如何,如果 count>0 ,然后存储空字符 CharT() 进入之内 数组的下一个连续位置和更新 G计数()

    在我们的例子中,因为我们为存储输入了太多字符,所以我们达到了第三个条件,并且在流上设置了失败位。

    可以使用 std::cin.clear() .