C++,cin 如何从输入缓冲区中读取?

C++, How cin reads from input buffer?

刚开始接触 C++ 的 CS 学生,我很难理解 cin 和 getline() 如何读入数据。

string str_1 = "";

cin >> str_1;        // User enters "John(Enter)"

据我了解,cin >> 将在输入缓冲区中查找数据,如果找到 none,它将提示用户。然后它将读入 "John" 在缓冲区中留下一行 return \n。

如果之后调用 getline() 它将看到 \n 和 return 什么都没有?

如果接下来调用 cin,它将按预期工作,为什么 cin 没有在缓冲区中看到行 return 并终止?

关于您的第一个 "understanding":不,如果没有输入等待,它将简单地阻塞(等待)直到有数据可以写入目标变量。不会提示。

关于 getline 电话,是的,没错。

而输入运算符>>在读取字符串或数字时跳过leading white-space.

如果您想深入了解细节,我建议您从 this std::istream reference 开始,然后从那里开始。