#include <iostream>
using namespace std;
class Fraction {
private:
int num;
int denom;
public:
Fraction() {
num = 0;
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;
}
};
int main() {
menu();
return 0;
}
Fraction::Fraction add(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::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;
}
void menu() {
int option;
do {
cout << "Select an option (use integer value only): ";
cin >> option;
switch(option) {
case 1:
initializingMenu();
break;
case 2:
addingMenu();
break;
case 3:
printingMenu();
break;
case 4:
cout << "Have Fun!" << endl;
break;
default:
cout << "Wrong option!" << endl;
}
} while (option != 0);
return;
}
void initializingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, or 3): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling init() - Stand Alone...\n" << endl;
a = init();
b = init();
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
initializingMenu();
}
} while (option != 0);
return;
}
void addingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, 3 or 4): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling add() - Stand Alone...\n" << endl;
c = add(a,b);
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
addingMenu();
}
} while (option != 0);
return;
}
void printingMenu() {
Fraction a;
Fraction b;
Fraction c;
int option;
do {
cout << "Select an option (1, 2, or 3): ";
cin >> option;
switch(option) {
case 1:
cout << "\nCalling print() - Stand Alone...\n" << endl;
print(c);
break;
case 2:
menu();
break;
default:
cout << "\nWrong option!" << endl;
printingMenu();
}
} while (option != 0);
return;
}
我正在制作一个程序来添加两个分数
我正在尝试使用菜单
我有四个菜单:
主菜单:提供转到其他菜单的选项
初始化菜单:输入num和denom
添加菜单:加起来分数
打印菜单:打印添加的分数
故障: 所以我运行程序并按顺序浏览菜单:main&gt; init&gt;添加&gt;打印 但是当我打印时,结果是错误的, 例如,1/2和1/2 假设给我2/2 但是当我打印时,它会给我0/1,这是默认构造函数
我有另一个程序,它的工作原理是: Add two fraction
来自网站上的程序,我觉得它很有效,因为我把它们放在同一个菜单中 但对于这个,我认为因为我分开了,所以打印没有从类中获得num和denom值
所以我想问一下,我该如何解决这个问题? 当我用菜单
分隔它们时,为什么我无法得到真实的结果抱歉,我的英语很差,代码很多
答案 0 :(得分:0)
您在每个函数中将分数声明为局部变量,它们与其他函数中声明的分数无关。最好的方法是将整个菜单框架更改为类,如下所示:
class Menus
{
Fraction a, b, c;
public:
void mainMenu();
void initializingMenu();
void addingMenu();
void printingMenu();
};
然后,在菜单成员函数中,使用类的成员变量 - 这些将保留它们的值,正是您所需要的。
您的main()将如下所示:
int main() {
Menus menus;
menus.mainMenu();
return 0;
}
我还建议让mainMenu()在循环中运行,直到退出并让其他菜单返回它而不是每次都调用它。这无疑会加深你的调用堆栈。