使用运算符>>后std :: getline失败的原因两次?

时间:2013-03-27 15:26:15

标签: c++ operators getline extraction

我有给定的输入:

 local
 127.0.0.1 localhost
 other
 next

使用以下代码,输出为空白,我预期其他。输出是“输出:”

#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;
}

但是,我注意到在调用cin >> ip >> domain;之前提取两次(std::getline)时会出现此问题。如果我有cin >> ip,代码就像我期望的那样工作。当我对operator>>使用双提取(std::getline)时,为什么会看到这个奇怪的结果?

1 个答案:

答案 0 :(得分:6)

operator>>提取之前的空白它提取的数据,而不是之后。这意味着它将“localhost”提取到domain中,但在流中保留新行。 getline()然后只读取此换行符。