2012-11-05 90 views
0
#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; 
} 

我想提出一個方案,以增加兩個分數添加兩個分數

,我有3選項菜單:初始化,除了和打印

我的計劃是:

首先,我選擇選項初始化,並輸入兩個分數

然後我會回到菜單,並選擇添加選項加兩個分數

,並在最後我選擇了選擇打印,打印結果

但是從上面的程序,我總是得到了init選項

其實我能做的輸入,麻煩,但是當我回到菜單,做加法,

加入將無法正常工作

我認爲這是行不通的,因爲除了功能沒有得到輸入

所以我想問問 我怎樣才能解決這個問題?

對不起,我的英文不好

+0

您是否在添加或打印時遇到問題?你有什麼麻煩? – Shashwat

+0

我在初始化和添加時遇到問題 –

+1

你有什麼麻煩? – Shashwat

回答

0

menu函數被破壞。它只讀取一次輸入,然後永遠循環(除非它是14)。您應該閱讀循環內的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; 
} 
+0

哦,明白了,謝謝,嗯,這是菜單....我認爲這是init和addtion的問題,好吧,謝謝你們 –