虽然(cin>> struct str)在c ++中如何使用?

时间:2017-12-16 18:36:13

标签: c++

我在使用while(cin)和struct时遇到了麻烦。有人请让我明白这个问题吗?我不知道是否有这样的帖子。如果是请原谅我和我的坏英语。

struct ThiSinh{
     string m_HT;
     float m_H;
};

我重载运算符>>为它

bool operator >> (istream& is, ThiSinh &ts){
    getline(is, ts.m_HT);
    is >> ts.m_H;
    is.ignore();
    return ???;
}

因为while(cin>> ThiSinh)需要bool类型,所以我不知道它应该返回什么数字或数据。以及当我按ctrl + Z时如何打破while循环。   我也试过

while(cin){
   ThiSinh ts;
   cin >> ts;
}

它有效,但我不想得到那些错误的数据。所以有人请帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您的operator >>会返回bool,这对于流提取运算符来说非常不寻常,并且在大多数流式上下文中使其无法使用。期望这些运营商返回对其运营的流的引用:

istream& operator >> (istream& is, ThiSinh &ts){
    getline(is, ts.m_HT);
    is >> ts.m_H;
    is.ignore();
    return is;
}

这是多个exrtactions实际工作的方式:

std::cin >> a >> b >> c;

实际上,首先执行auto &tmp = operator>>(std::cin, a),然后调用operator>>(tmp, b),依此类推。

可以在条件中使用流(以及扩展,流提取操作)的原因是std::istream(和std::ostream)定义到bool的转换(返回{{ 1}} iff流处于无错误状态);然后由条件调用该转换。

换句话说,这个:

true

实际上变成了这个:

while (std::cin >> ts)

并且可以进行投射,因为while (static_cast<bool>(operator>>(std::cin, ts))) 返回operator>>std::istream&定义了转化为std::istream