2012-11-05 47 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的问题,好吧,谢谢你们 –