如何使我的重载分数>>运算符识别负数.

Ggn*_*ome 1 c++ operator-overloading

好的,所以我一直试图在过去的两天里让它工作,但无济于事.本质上有一个文本文件,程序从中提取分数和混合数,我的>>运算符应该将它们转换为正常分数,由我的<<运算符输出,这很好.但是一旦我的函数在文件中命中-8,程序就会崩溃并结束,让我在控制台上按下"按任意键继续"结束提示.它处理-4/5和-10/5没问题,分别返回-4/5和-2.但当负数是整数时,它会崩溃.

istream& operator>>(istream& input, fraction& fr)
  {
    int Num=0;
    int Den=0;
    int Whole=0;
    input >> Num;
    if (input.peek() == '+')
    {
        Whole = Num;
        input.ignore() >> Num;
        input >> Den;
    }
    else if (input.peek() == '/')
    {
        input.ignore() >> Den;
    }
    else if (input.peek() == ' ')
    {
       input.ignore();
       Den = 1;
    }
    Num = (Whole*Den) + Num;
    fr = fraction(Num, Den);
    return input;
 }
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 6

使用默认值Den = 1而不是0.由于除以0而崩溃.