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

C++ 为什么我们需要在getline(cin,string)之前使用cin.ignore()?,c++,C++,为什么在输入字符串之前需要使用cin.ignore() 反手的过程是什么?如果我们不使用cin.ignore(),为什么它会跳过字符串中的输入(如果我们调用getline函数获取更多变量),如果我们不使用cin.ignore()。如果没有,那么你就不需要,这会导致你忽略你想要的东西。最常见的情况是忽略前一行结束的换行符 如果有人键入“foobar”,而您希望先读取“foo”,然后读取“bar”,则需要忽略它们之间的输入(或使用自动执行此操作的函数)。std::getline()如果流中有一个前导

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


反手的过程是什么?如果我们不使用
cin.ignore()
,为什么它会跳过字符串中的输入(如果我们调用
getline
函数获取更多变量),如果我们不使用
cin.ignore()
。如果没有,那么你就不需要,这会导致你忽略你想要的东西。最常见的情况是忽略前一行结束的换行符

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

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

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

我详细地讨论了这一点