我正在学习 C++,并且正在做一个处理表示有理数(例如 ½)的类的项目。我重载了 istream>>
运算符,以便它正确地从流中读取有理数。
我在将整数输入流中以获得有理数时遇到问题。例如,如果有人键入 2,我希望它从流中读取为 2/1。有人告诉我使用该peek()
功能会起作用,但我不知道怎么做。这是代码:
std::istream& operator>>(std::istream& is, Rational& r)
{
int p, q;
char c;
is >> p >> c >> q;
if (!is)
return is;
// Require that the divider to be a '/'.
if (c != '/') {
is.setstate(std::ios::failbit);
return is;
}
// Make sure that we didn't read p/0.
if (q == 0) {
is.setstate(std::ios::failbit);
return is;
}
r = Rational(p, q);
return is;
}
除非输入整数,否则它工作得很好;我希望它被读作(int)/1
.
有什么建议么?