如何制作我的重载分数>>操作员识别负数。

时间:2014-01-30 21:07:42

标签: 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;
 }

1 个答案:

答案 0 :(得分:6)

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