Add two fraction

情到浓时终转凉″ 提交于 2020-01-16 11:59:07

问题


#include <iostream>
using namespace std;


class Fraction {
private:
    int num;    
    int denom;

public:
    Fraction() {  
        int num = 0;
        int denom = 1;
    }

    Fraction(const Fraction& ref) { 
        num = ref.num;
        denom = ref.denom;
    }

    Fraction(int arg) {

        num = arg;

        denom = 1;
    }

    Fraction(int arg, int arg2) {
        num = arg;
        if (arg2 == 0)
            denom = 1;
        else 
            denom = arg2; 
    } 

    ~Fraction() {     
    }

    void setnum(int arg) {
        num = arg;
        return;
    }

    void setdenom(int arg) {
        if(arg) {
            denom = arg;
        } else {
            denom = 1;
            }
        return;
    }

    int getnum() const {
        return num;
    }

    int getdenom() const {
        return denom;
    }
};

Fraction addition(Fraction&, Fraction&);
Fraction init(void);
void print(Fraction&);
void menu(void);

int main() {

    menu();

    return 0;
}

void menu() {
    int option;
    Fraction e;
    Fraction f;
    Fraction g;

    cout << "option: ";
    cin >> option;

    do {
        switch(option) {
        case 1:
            cout << "For init: " << endl;
            e = init();
            f = init();
            menu();
            break;
        case 2:
            cout << "For add: " << endl;
            g = addition(e,f);
            break;
        case 3:
            cout << "For print: " << endl;
            print(g);
            break;
        case 4:
            cout << "bb" << endl;
            break;
        default:
            cout << "Wrong" << endl;
        }

    }while(option != 4);

    return;
}
Fraction addition(Fraction& arg1, Fraction& arg2) {

    Fraction temp;

    temp.setnum((arg1.getnum() * arg2.getdenom()) + (arg1.getdenom() * arg2.getnum()));

    temp.setdenom(arg1.getdenom() * arg2.getdenom());

    return temp;

}

Fraction init() {
    int num;
    int denom;

    cout << "num: ";
    cin >> num;

    cout << "denom: ";
    cin >> denom; 

    Fraction info(num, denom);

    return info;
}

void print(Fraction& info) {
    cout << "num: " << info.getnum() << endl;
    cout << "denom: " << info.getdenom() << endl;
    return;
} 

I am making a program to add two fraction

and I have menu for 3 option: initialization, addition and print

My plan is:

First I select the option init, and input two fractions

then I will go back to menu and select the option addition to add up two fractions

and at the last I select the option print to print the result

But from the above program, I always got trouble from the init option

actually I could do the input, but when I went back to menu and did the addition,

the addition won't work

I think it was not working because the addition function didn't get the input

So I want to ask how can I fix this?

Sorry for my poor English


回答1:


The menu function is broken. It reads the input only once and then cycles forever (unless it's 1 or 4). You should read the option value inside the loop. And remove the unnecessary recursion in option 1.

void menu() {
    int option;
    Fraction e;
    Fraction f;
    Fraction g;

    do {
        cout << "option: ";
        cin >> option;

        switch(option) {
        case 1:
            cout << "For init: " << endl;
            e = init();
            f = init();
    //      menu();  <-- Remove this
            break;
            case 2:
            cout << "For add: " << endl;
            g = addition(e,f);
            break;
        case 3:
            cout << "For print: " << endl;
            print(g);
            break;
        case 4:
            cout << "bb" << endl;
            break;
        default:
            cout << "Wrong" << endl;
        }

    }while(option != 4);

    return;
}


来源:https://stackoverflow.com/questions/13226012/add-two-fraction

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!