微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算器程序,可以将计算结果存储在变量中

如何解决计算器程序,可以将计算结果存储在变量中

我编写了这个简单的计算器程序,用户可以在其中将计算结果存储在输入的变量中。我不知道如何更好地解释这一点,因此我将通过一个示例进行演示。如果输入是:

a = 1 + 2
b = 6 - 5
c = 20 * a
d = a / b
exit

然后输出应为:

3
1
60
3

查看程序如何将a = 1 + 2的值保留为a = 3。然后,用户可以在其他计算中自由使用a。例如,20 * a。从a = 3开始,20 * a应该等于60

但是,我的程序有问题。如果我输入以下内容

a = 1 + 2
b = a + 3
c = a + b
d = 20 * a

然后我在第3行和第4行的输出中遇到问题。我得到的输出如下所示:

3
6
55

您可以看到a + b = 55应该在9时出现。当我尝试乘以20 * a时,我什至没有输出。我假设最后一行没有输出,因为它甚至没有在代码中输入乘法。但是不知道55的来源。

这是我的代码(我知道它很杂乱,但这是因为我已尽一切努力解决了这个问题,但我没有运气):

#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <sstream>
#include <string>

using namespace std;

    char op='a';
    double num1,num2,num3=0;
    int sub1,sub2=0;
    std::string temp;

int main() {

    double var[26];
    
    bool flag = false;
    
    char eq[5];
    
    while (true) {
        
        getline(cin,temp);
        
        if (temp.compare("exit") == 0) {
            break;
        }
        
        std::stringstream os(temp);
        
        int count = 0;
        
        for(char& c : temp) {
            if(c != ' '){
                eq[count] = c;
                count++;
            }
        }
        
        /* for(std::string::size_type i = 0; i < temp.size(); ++i){
            if(temp[i] != ' '){
                eq[count] = temp[i];
                count++;
            }
        }
         */
    
        
        if(eq[0] >= 97 && eq[0] <= 122){
            num1 = eq[2] - 48;
            op = eq[3];
            num2 = eq[4] - 48;
            flag = true;
        }
        else{
            num1 = eq[0] - 48;
            op = eq[1];
            num2 = eq[2] - 48;
        }
        
        
        
        switch (op) {
        case '+':
            if(flag == true){
                var[eq[0] - 97] = num1 + num2;
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48 - 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48 - 97];
            }
            cout << num1 + num2 << endl;
            break;

        case '-':
            if(flag == true){
                var[eq[0] - 97] = num1 - num2;
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48- 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48- 97];
            }
            cout << num1 - num2 << endl;
            break;

        case '*':
            if(flag == true){
                var[eq[0] - 97] = num1 * num2;
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48- 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48- 97];
            }
            cout << num1 * num2 << endl;
            break;

        case '/':
            if(flag == true){
                var[eq[0] - 97] = num1 / num2;
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48- 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48- 97];
            }
            cout << num1 / num2 << endl;
            break;

        case '%':
            sub1 = num1;
            sub2 = num2;
            if(flag == true){
                var[eq[0] - 97] = sub1 % sub2;
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48- 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48- 97];
            }
            cout << sub1 % sub2 << endl;
            break;

        case '^':
            if(flag == true){
                var[eq[0] - 97] = pow(num1,num2);
            }
            if((int)num1 >= 48 && (int)num1 <= 57){
                num1 = var[(int)num1 + 48- 97];
            }
            if((int)num2 >= 48 && (int)num2 <= 57){
                num2 = var[(int)num2 + 48- 97];
            }
            cout << pow(num1,num2) << endl;
            break;
        }
    }

    return 0;
}

我认为问题出在for循环中,这就是为什么您看到一个for循环被设置为注释的原因。我尝试用另一个for循环替换它,但是没有运气。由于我尝试了很多事情,但没有任何效果,因此我将不胜感激。我会在这里放一些我尝试过的东西,但是我不想再发表这个帖子。如果您需要更多信息,请告诉我。

解决方法

应该在执行进一步操作之前从var数组中加载值,因此,在解析该行之后,立即像这样加载它们

if(eq[0] >= 97 && eq[0] <= 122){
    num1 = eq[2] - 48;
    op = eq[3];
    num2 = eq[4] - 48;
    flag = true;
}
else{
    num1 = eq[0] - 48;
    op = eq[1];
    num2 = eq[2] - 48;
}

if((int)num1 >= 48 && (int)num1 <= 57){
        num1 = var[(int)num1 + 48 - 97];
}

if((int)num2 >= 48 && (int)num2 <= 57){
        num2 = var[(int)num2 + 48 - 97];
}

在开关块内部,您可以直接执行操作,例如。对于'+'情况:

case '+':
        
    if(flag == true){
       var[eq[0] - 97] = num1 + num2;
    }
        
    cout << num1 + num2 << endl;
    break;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?