繁体   English   中英

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

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

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

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

仅当您之前有一些未读的输入时,才需要使用cin.ignore() 如果没有,则不需要,这将导致您忽略所需的内容。 最常见的情况是忽略上一行结束的换行符。

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

std::getline()仅在流中要输入的内容前有换行符时才“跳过”输入。 如果您之前执行过格式化提取而留下了剩余的换行符,则可能会出现这种情况。 默认情况下, std::getline()在获取换行符后会限制提取。

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

我在这里的回答中详细讨论了这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM