c++ - 如何让我的重载分数 >> 运算符识别负数。

标签 c++ operator-overloading

好的,过去 2 天我一直在努力让它发挥作用,但无济于事。本质上有一个文本文件,程序从中提取分数和带分数,我的 >> 运算符应该将它们转换为正常分数以由我的 << 运算符输出,这工作正常。但是一旦我的函数在文件中命中 -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;
 }

最佳答案

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

关于c++ - 如何让我的重载分数 >> 运算符识别负数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21467410/

相关文章:

c++ - 全局新运算符重载

c++ - "undefined reference to ` 运算符>>(std::istream&, Complex<int>&)"用于模板 Complex<T>

C++ 拒绝识别字符串

C++ 开关 () 错误

c++ - 为什么 `(void *)&` 会得到变量的地址?

c++ - 运算符++ : reference vs value return and unused argument

C++ 重载 (+) 运算符

c++ - 在 std::abs 函数上

c++ - 缓慢的 SLAB/SLUB 内存分配

c++ - Linux AIO : Poor Scaling