C++ 接收输入的类中的istream friend函数出现问题
我有一个处理三个文件的有理数的类,我的目标是能够满足这个输出C++ 接收输入的类中的istream friend函数出现问题,c++,class,friend,ostream,istream,C++,Class,Friend,Ostream,Istream,我有一个处理三个文件的有理数的类,我的目标是能够满足这个输出 correct output: Enter operator (+,-,*,/,==,>=,<=,!=,<,>,-1 for negation): - Enter the two operands (ex. 1/2 or -3/4): 2/3 3/8 (2/3)-(3/8)=7/24 正确输出: 输入运算符(+、-*、/=、=、> =,当你在调试器中运行代码时,你会做什么观察?这是一个很好的机会,学习如何使
correct output:
Enter operator (+,-,*,/,==,>=,<=,!=,<,>,-1 for negation): -
Enter the two operands (ex. 1/2 or -3/4): 2/3 3/8
(2/3)-(3/8)=7/24
正确输出:
输入运算符(+、-*、/=、=、> =,当你在调试器中运行代码时,你会做什么观察?这是一个很好的机会,学习如何使用它一次运行一行程序,检查所有变量及其值,并分析程序的逻辑执行流程。知道如何使用调试器是每个C++的必备技能。开发人员,没有例外。在调试器的帮助下,您应该能够快速找到您编写的此程序和所有未来程序中的错误,而无需向任何人寻求帮助。不幸的是,我不熟悉使用调试器,我倾向于通过注释代码和一次运行一个函数来调试。我确实计划熟悉一下你越早“熟悉”它,你就越早能够在自己的代码中发现bug,而不必向别人寻求帮助。
my output:
Enter operator (+,-,*,/,==,>=,<=,!=,<,>,-1 for negation): +
Enter the two operands (ex. 1/2 or -3/4): 2/3 3/8
(2/3)+(0/1)= 2/3
RATIONAL.h
friend istream& operator >> (istream& ins, Rational &r);
RATIONAL.cpp
istream& operator >> (istream& ins, Rational &r)
{
bool isnegative = false, slashfound = false, isvalid = true;
string str;
ins >> str;
int i;
for(i = 0; i < str.length(); i++)
{
if(str[i] == '-')
{
if (i != 0)
isvalid = false;
else
isnegative = true;
}
else if(str[i] == '/')
{
if(i = 0 || (i == str.length()-1) || (isnegative && i == 1) || slashfound)
isvalid = false;
else
slashfound = true;
}
else if(!isdigit(str[i]))
isvalid = false;
if(!isvalid)
{
ins.setstate(ios::failbit);
return ins;
}
istringstream istr(str);
if (slashfound)
{
int n, d;
char c;
istr >> n >> c >> d;
if(d == 0)
{
ins.setstate(ios::failbit);
}
else
{
r.numerator = n;
//r.denominator = 1; // slashfound
r.denominator = d;
}
}
else // case where slash not found
{
istr >> r.numerator;
r.denominator = 1;
}
}
return ins;
}
MAIN.cpp
cout << "Enter the two operands: ";
cin >> r1 >> r2;