提问人:RaSedg 提问时间:9/13/2015 最后编辑:RaSedg 更新时间:9/13/2015 访问量:374
C++,cin 如何从输入缓冲区读取?[复制]
C++, How cin reads from input buffer? [duplicate]
问:
CS学生刚开始学习C++,我很难理解cin和getline()如何读取数据。
string str_1 = "";
cin >> str_1; // User enters "John(Enter)"
据我了解,cin >>将在输入缓冲区中查找数据,如果找不到数据,它将提示用户。然后,它将读入“John”,在缓冲区中留下一个行回车\n。
如果在那之后调用 getline(),它将看到 \n 并且不返回任何内容,对吗?
如果接下来调用 cin,它将按预期工作,为什么 cin 看不到缓冲区中的行返回并终止?
答:
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
评论