为什么我们需要在getline(cin,string)之前使用cin.ignore()?

时间:2014-02-10 20:00:40

标签: c++

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

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

2 个答案:

答案 0 :(得分:1)

如果之前有一些您尚未阅读的输入,则只需使用cin.ignore()。如果没有,那么你不需要它会导致你忽略你想要的东西。最常见的情况是忽略在前一行结束的换行符。

如果有人输入“foo< enter> bar”并且您想要读取“foo”然后“bar”,则需要忽略< enter>它们之间(或使用自动执行此功能的功能)。

答案 1 :(得分:0)

如果流中有一个前导换行符在您希望读取的输入之前,则

std::getline()仅“跳过”输入。如果您之前执行了格式化提取而留下了剩余换行符,则可能会出现这种情况。默认情况下,std::getline()在获取换行符后分隔提取。

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

我在my answer here中详细讨论了这个问题。