正如其他两个答案所指出的那样,你必须使用std :: getline,但这就是我要做的:
if (std::getline(is, zipcode, ',') &&
std::getline(is, city, ',') &&
std::getline(is, state))
{
d.zipCode = std::stoi(zipcode);
}
我做的唯一真正的改变是我将提取包含在if语句中,以便您可以检查这些读取是否成功.此外,为了轻松完成此操作(您不希望为每个Data对象键入上述内容),您可以将其放在一个函数中.
您可以重载>> Data类的运算符,如下所示:
std::istream& operator>>(std::istream& is, Data& d)
{
std::string zipcode;
if (std::getline(is, zipcode, ',') &&
std::getline(is, d.city, ',') &&
std::getline(is, d.state))
{
d.zipCode = std::stoi(zipcode);
}
return is;
}
现在变得如此简单:
Data d;
if (std::cin >> d)
{
std::cout << "Yes! It worked!";
}