C++,cin 如何从输入缓冲区读取?[复制]

C++, How cin reads from input buffer? [duplicate]

提问人:RaSedg 提问时间:9/13/2015 最后编辑:RaSedg 更新时间:9/13/2015 访问量:374

问:

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

string str_1 = "";

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

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

如果在那之后调用 getline(),它将看到 \n 并且不返回任何内容,对吗?

如果接下来调用 cin,它将按预期工作,为什么 cin 看不到缓冲区中的行返回并终止?

C++ IOSTREAM CIN getLine 输入缓冲区

评论


答:

3赞 Some programmer dude 9/13/2015 #1

关于你的第一个“理解”:不,如果没有输入等待,它只会阻止(等待),直到有数据可以写入目标变量。不会进行任何提示。

关于电话,是的,这是正确的。getline

输入运算符在读取字符串或数字时跳过前导空格。>>

如果你想深入了解细节,我建议你从这个 std::istream 参考开始,然后从那里开始。

评论

0赞 RaSedg 9/13/2015
为什么“>>”与“getline”一起使用时不跳过前导“\n”?
0赞 Some programmer dude 9/13/2015
@RaSedg 因为不使用 .getline>>
1赞 Lightness Races in Orbit 9/13/2015
@RaSedg:简单地说,因为你使用的是_formatted I/O,但你只是提取原始字符,这个功能故意不执行空格跳过之类的事情。operator>>getline