问题
#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