这与:cin and getline skipping input 有关但他们不回答为什么会发生这种情况,只回答如何解决它。
为什么 cin
会在缓冲区中留下一个 '\n' 但 cin.getline 会接受它?
例如:
cin >> foo;
cin >> bar;//No problem
cin >> baz;//No problem.
但是使用cin.getline
cin >> foo;
cin.getline(bar,100);//will take the '\n'
那么为什么它不会发生在 cin
而会发生在 cin.getline
上呢?
最佳答案
因为,当你说 getline
时,你说你想得到一行......一行是以 \n
结尾的字符串,结尾是
当你说 cin >> something
时,你想要得到的正是 something
,仅此而已。结束行标记不是它的一部分,所以它不会被消耗掉。除非你有一个特殊的线类型,但标准库中没有这样的东西。
虽然没有引用标准,这可能被视为意见,但这是其背后的逻辑。 它们有不同的语义。还有一个区别getline
作为 unformatted input 工作, 和 operator>>
作为 formatted input 工作.我强烈建议阅读这些链接以了解差异。这也表明它们在语义上是不同的。
另一个答案,无论好坏,都值得商榷,我肯定会引用标准,getline
的行为方式,以及 operator>>
的行为方式类型,然后说,它是这样工作的,因为标准是这样说的。这很好,因为该标准绝对定义了事物的工作方式,并且可以任意定义...而且它很少解释设计背后的动机和逻辑。
关于c++ - 为什么 cin 命令在缓冲区中留下 '\n'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109679/