我有给定的输入:
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
)时,为什么会看到这个奇怪的结果?
答案 0 :(得分:6)
流operator>>
提取之前的空白它提取的数据,而不是之后。这意味着它将“localhost”提取到domain
中,但在流中保留新行。 getline()
然后只读取此换行符。