【问题标题】:Why do we need to use cin.ignore() before getline(cin, string)? [duplicate]为什么我们需要在 getline(cin, string) 之前使用 cin.ignore()? [复制]
【发布时间】:2014-03-08 08:21:34
【问题描述】:

为什么我们需要在输入字符串之前使用cin.ignore()

什么是反手过程?如果我们不使用cin.ignore(),为什么它会跳过字符串中的输入(如果我们调用getline 函数以获得更多变量)?

【问题讨论】:

    标签: c++


    【解决方案1】:

    只有当有一些以前的输入你没有读过时,你才需要使用cin.ignore()。如果没有,那么你就不需要这样做,它会导致你忽略你想要的东西。最常见的情况是忽略前一行结束的换行符。

    如果有人键入“foobar”并且您想读取“foo”然后读取“bar”,则需要忽略他们之间的 (或使用自动执行此操作的函数)。

    【讨论】:

      【解决方案2】:

      std::getline() 仅当流中有一个前导换行符位于您要读取的输入之前,才会“跳过”输入。如果您之前执行了格式化的提取并留下了残留的换行符,则可能会出现这种情况。默认情况下,std::getline() 会在获取换行符时分隔提取。

      ignore()是一个丢弃一定数量字符的函数(默认丢弃的数量是1)。如果您在未格式化的提取(如std::getline())之前使用它,但在格式化 提取(如std::istream::operator>>())之后使用它,它将允许按预期读取数据,因为它将丢弃剩余的换行符.

      这个我在my answer here详细讲。

      【讨论】:

        猜你喜欢
        • 2018-05-10
        • 2018-08-13
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2022-11-04
        • 2020-06-15
        • 2015-08-27
        • 1970-01-01
        相关资源
        最近更新 更多