为什么我们需要在输入字符串之前使用cin.ignore()
?
反手过程是什么?如果我们不使用getline
,为什么它会跳过字符串中的输入(如果我们为更多变量调用cin.ignore()
函数)?
答案 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中详细讨论了这个问题。