(C++)如何让它循环回到菜单?计算器类型

(c++) How can I get this to loop back to the menu? Calculator type

本文关键字:菜单 类型 计算器 循环 C++      更新时间:2023-10-16

我知道这段代码仍然很草率,但我目前专注于让它在我让它变得漂亮之前做我需要它做的事情。我的任务是制作一个计算器,该计算器获取选择和输入,然后执行操作,然后循环回菜单以提示用户进行另一个选择和输入。我不完全确定如何在不使用全局变量的情况下做到这一点。

#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 行中存在错误,这比您手头的错误分配更容易调试。我保证这将为您节省无尽的调试之夜。