(C++)如何让它循环回到菜单?计算器类型
(c++) How can I get this to loop back to the menu? Calculator type
我知道这段代码仍然很草率,但我目前专注于让它在我让它变得漂亮之前做我需要它做的事情。我的任务是制作一个计算器,该计算器获取选择和输入,然后执行操作,然后循环回菜单以提示用户进行另一个选择和输入。我不完全确定如何在不使用全局变量的情况下做到这一点。
#include<iostream>
#include<iomanip>
using namespace std;
int showMenu(int & );
double getX(double & );
double getY(double & );
int add(double, double);
int divide(double, double);
int multiply(double, double);
int subtract(double, double);
bool exit(bool & );
int main(){
int choice;
bool yes = false;
double x =0;
double y =0;
do{
showMenu(choice);
getX(x);
getY(y);
switch(choice){
case 1:
add(x,y);
break;
case 2:
subtract(x,y);
break;
case 3:
divide(x,y);
break;
case 4:
multiply(x,y);
break;
case 5:
exit(yes);
}
}while(yes = false);
return 0;
}
int showMenu(int &choice){
cout << "*" << setw(50) << setfill('-') << "*" << endl;
cout << "*" << setfill(' ') << right << setw(30) << "Calculator" << setw(19) << "*" << endl;
cout << "*" << setfill ('=') << setw(50) << "*" << endl;
cout << setfill(' ') << "* 1.) Add operation. " <<setw(30) << "*" << endl;
cout << "* 2.) Subtract operation. " << setw(25) << "*" << endl;
cout << "* 3.) Divide operation. " << setw(30) << "*" << endl;
cout << "* 4.) Multiply operation. " << setw(30) << "*" << endl;
cout << "* 5.) Exit. " << setw(40) << "*" << endl;
cout << "*" << setfill('-') << setw(50) << "*" << endl;
cout << "Please choose your option: " << endl;
cin >> choice;
if(choice < 0 || choice > 5){
cin.clear(choice);
cout << "Invalid selection." << endl;
}
return choice;
}
double getX(double &x)
{
cout << "Input first number: " << endl;
cin >> x;
return x;
}
double getY(double &y)
{
cout << "Input second number: " << endl;
cin >> y;
return y;
}
int add(double x, double y)
{
double sum = x+y;
cout << x << "+" << y << " = " << sum << endl;
return 0;
}
int subtract(double x, double y)
{
double mus = x-y;
cout << x << "-" << y << " = " << mus << endl;
return 0;
}
int multiply(double x, double y)
{
double product = x*y;
cout << x << "*" << y << " = " << product << endl;
return 0;
}
int divide(double x, double y)
{
double quotient = x/y;
cout << x << "/" << y << " = " << quotient << endl;
return 0;
}
bool exit(bool &yes)
{
cout << "Goodbye!" << endl;
yes = true;
return yes;
}
使用正确的比较运算符 , while(yes == false);
为了比较,使用了==
。运算符=
用于分配。do
循环中的代码使用运算符 =
。
你应该使用赤道"=="来判断条件"yes == false",而不是赋值运算符'='。因为赋值运算符始终返回 true,因此 'while(yes = false)' 与 'while(1)' 相同。
事实上,你的while循环条件有问题。您正在使用布尔变量"yes"来完成循环。
你可能想做的是
while(yes == false)
您可以通过反转条件检查顺序来避免此代码和所有未来代码中的常见错误,如下所示:
while(false == yes)
我知道阅读起来有点违反直觉,但如果你碰巧再次错过第二个=while(false = yes)
永远不会编译,并且会告诉您 XYZ 行中存在错误,这比您手头的错误分配更容易调试。我保证这将为您节省无尽的调试之夜。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- (C++)如何让它循环回到菜单?计算器类型
- 用户从菜单 C++ 中选择数组类型
- 如何覆盖已定义类型的 ostream <<运算符 如何使下拉子菜单直接显示在其父菜单下方<li>?