为什么在使用operator>>两次后std::getline会失败?

3

我有以下输入:

 local
 127.0.0.1 localhost
 other
 next

使用以下代码,输出为空白,而我期望的是other。输出为"output: "。
#include <iostream>
using namespace std;

int main() {
    std::string ip, domain, header;
    std::getline(cin, header);
    cin >> ip >> domain;
    std::getline(cin, header);
    std::cout << "output: " << header;
}

然而,我注意到在调用std::getline之前两次提取(cin >> ip >> domain;)时会出现此问题。如果我只使用cin >> ip,那么代码将按照我的预期运行。为什么我在使用operator>>std::getline进行双重提取时看到这种奇怪的结果?


你的输入中有空行吗?请使用代码格式化来使其更加明确。 - Kerrek SB
1个回答

6

operator>> 提取其提取的数据之前的空格,而不是之后。这意味着它将 "localhost" 提取到 domain 中,但留下了流中的换行符。然后,getline() 仅读取此换行符。


这是正确的。当我两次使用 std::getline(cin, header); 时,我得到了正确的结果。谢谢。 - andre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接