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

Why do we need to use cin.ignore() before getline(cin, string)?

本文关键字:cin ignore 我们 string getline 为什么      更新时间:2023-10-16

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

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

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

如果有人输入"foobar",而你想读"foo"然后读"bar",你需要忽略他们之间的(或使用自动这样做的函数)。

> std::getline() 只有在流中在您要读取的输入之前有一个前导换行符时,才会"跳过"输入。如果您之前执行了留下剩余换行符的格式化提取,则可能会发生这种情况。默认情况下,std::getline()在获取换行符时分隔提取。

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

在这里的回答中详细讨论了这个问题。