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;