无法让它更新变量C++

Cant get this to update the variables C++

本文关键字:变量 C++ 更新      更新时间:2023-10-16

我正在编写一个计算器程序,您可以在其中输入总和,它会给您答案。这部分工作正常。我遇到的问题是取前一个总和的答案并用它进行计算。

喜欢:5 + 5 = 10 ans + 10 = 20

当我运行下面的代码时,它工作正常,一遍又一遍地进行正常计算。但是当我输入例如。 ans*2它使用以前设置为 operatenumB 的值。因此,如果是:5 + 5并且我想使用该结果并将其乘以例如 2,它将这样做: 10 + 5 = 15

这是我的代码:

#include <iostream>
#include <cmath>
#include <iomanip>
#include <sstream>
#include "bell.h"
using namespace std;
int main()
{
    stringstream ss;
    double numA;
    char operate;
    double numB;
    double ans=0;
    string temp;
    cout<<"input: ";
    getline(cin, temp);
    ss.str(temp);
    ss>>numA>>operate>>numB;
    cout<<setprecision(9);
    while(temp[0] != 'q' && temp[0] != 'Q')
    {
        if(temp[0]=='a' && temp[1]=='n' && temp[2]=='s')
        {
            numA=ans;
        }
        switch(operate)
        {
            case '+':
            {
                ans=numA+numB;
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            case '-':
            {
                ans=numA-numB;
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            case '*':
            {
                ans=numA*numB;
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            case '/':
            {
                ans=numA/numB;
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            case '^':
            {
                ans=pow(numA, numB);
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            case 'z':
            {
                ans=bell(numA, numB);
                cout<<numA<<" "<<operate<<" "<<numB <<" = "<< ans<<endl;
                break;
            }
            default:
            {
                cout<<"Invalid input. Please try again!"<<endl;
            }
        }
        ss.clear();
        ss.str(" ");
        cout<<"Input: ";
        getline(cin, temp);
        ss.str(temp);
        ss>>numA>>operate>>numB;
    }
    cout<<"Goodbye"<<endl;
    return 0;
}

有人可以帮我解决这个问题吗?为什么operatenumB不更新?

我怀疑问题出在这个陈述上:

ss>>numA>>operate>>numB;

numAnumB 属于 double 型。例如,如果输入行是 ans + 10 ,则该语句将尝试从此输入的开头提取numA作为双精度,这将失败,而不会消耗输入字符串的任何部分。因此,提取剩余值(operatenumB(不会给你预期的值,因为整个输入字符串在提取这些值时仍然有待解析。

一种方法是在读取输入行后立即检查ans情况。然后,您可以使上述语句成为条件语句,针对ans情况以不同的方式解析值。

另一种解决方案是首先将numA值和numB值提取为字符串变量,只有在检查ans特殊情况后才将它们转换为双精度值。