gpt4 book ai didi

c++ - while (cin>> struct str) 在 C++ 中我该如何使用?

转载 作者:行者123 更新时间:2023-11-30 02:21:56 26 4
gpt4 key购买 nike

我在将 while(cin) 与结构一起使用时遇到了麻烦。有人可以让我清楚这个问题吗?不知道有没有人问过这种帖子。如果是,请原谅我和我糟糕的英语。

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

它起作用了,但我不想得到那个虚假数据。所以有人请帮助我。提前致谢。

最佳答案

您的 operator >> 返回一个 bool,这对于流提取运算符来说是非常不寻常的,并使其在大多数流上下文中无法使用。此类运算符应返回对其进行运算的流的引用:

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

这就是多重​​提取的实际工作方式:

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

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

之所以可以在条件中使用流(以及扩展的流提取操作)是因为std::istream(和std::ostream)定义了一个转换为 bool(如果流处于无错误状态,则返回 true);然后由条件调用该转换。

换句话说,这:

while (std::cin >> ts)

实际上变成了这样:

while (static_cast<bool>(operator>>(std::cin, ts)))

并且转换是可能的,因为 operator>> 返回 std::istream& 并且 std::istream 定义了到 的转换 bool

关于c++ - while (cin>> struct str) 在 C++ 中我该如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com