为什么我们需要在输入字符串之前使用cin.ignore()
?为什么我们需要在getline(cin,string)之前使用cin.ignore()?
什么是反手过程?如果我们不使用cin.ignore()
,为什么它跳过字符串中的输入(如果我们称getline
函数为更多变量)?
为什么我们需要在输入字符串之前使用cin.ignore()
?为什么我们需要在getline(cin,string)之前使用cin.ignore()?
什么是反手过程?如果我们不使用cin.ignore()
,为什么它跳过字符串中的输入(如果我们称getline
函数为更多变量)?
std::getline()
如果在您希望读取的输入之前的流中存在前导换行符,则只有“跳过”输入。如果您以前执行了格式化的提取,则会留下残余的换行符,这可能会导致问题。默认情况下,std::getline()
在获取换行符后分隔提取。
ignore()
是丢弃一定数量的字符(默认情况下放弃的数量为1)的函数。如果你使用前面的一个未格式化的提取(如std::getline()
),但是在格式化的提取(如std::istream::operator>>()
)之后,它将允许按照预期读取数据,因为它会丢弃残余换行符。
我在my answer here中详细讨论这个问题。
您只需要使用cin.ignore()
,当您有一些以前没有阅读过的输入时。如果没有,那么你不需要,它会导致你忽略你想要的东西。最常见的情况是忽略前一行结束的换行符。
如果有人类型的“富<进入>吧”,你想读“富”,然后“酒吧”,你需要忽略<进入它们之间>(或使用会自动完成的功能)。