不能得到这个更新变量C++

不能得到这个更新变量C++,c++,stringstream,sstream,C++,Stringstream,Sstream,我正在写一个程序,这是一个计算器,你可以在其中输入总和,然后它会给你答案。那部分很好用。我遇到的问题是,取上一个和的答案,然后用它进行计算 比如:5+5=10 ans+10=20 当我运行下面的代码时,当我一遍又一遍地进行正常计算时,它工作得很好。但是,当我输入例如ans*2时,它使用之前设置为“操作”和“麻木”的值。所以,如果它是:5+5,我想用这个结果乘以eg 2,它会这样做: 10+5=15 这是我的密码: #include <iostream> #include <cm

我正在写一个程序,这是一个计算器,你可以在其中输入总和,然后它会给你答案。那部分很好用。我遇到的问题是,取上一个和的答案,然后用它进行计算

比如:5+5=10 ans+10=20

当我运行下面的代码时,当我一遍又一遍地进行正常计算时,它工作得很好。但是,当我输入例如ans*2时,它使用之前设置为“操作”和“麻木”的值。所以,如果它是:5+5,我想用这个结果乘以eg 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;
}

谁能帮我把这件事做好吗。为什么operate和numB不更新?

我怀疑这句话有问题:

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

一种方法是,在读取输入行之后,首先检查ans案例。然后,您可以将上面的语句设置为条件语句,对ans案例的值进行不同的解析


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

您的问题是什么?