Ich kann dies nicht dazu bringen, die Variablen in C++ zu aktualisieren
-
26-12-2019 - |
Frage
Ich schreibe ein Programm, bei dem es sich um einen Taschenrechner handelt, bei dem man die Summe eintippt und das Ergebnis erhält.Dieser Teil funktioniert gut.Das Problem, das ich habe, besteht darin, die Antwort der vorherigen Summe zu nehmen und damit eine Berechnung durchzuführen.
Wie: 5 + 5 = 10
ans + 10 = 20
Wenn ich den folgenden Code ausführe, funktioniert er einwandfrei, auch wenn ich normale Berechnungen immer wieder durchführe.Wenn ich jedoch z. B. tippe. ans*2
Es werden die zuvor eingestellten Werte verwendet operate
Und numB
.Wenn es also so wäre: 5 + 5
und ich möchte dieses Ergebnis verwenden und es mit z. B. 2 multiplizieren, es würde Folgendes bewirken:10 + 5 = 15
Hier ist mein Code:
#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;
}
Könnte mir bitte jemand helfen, das zum Laufen zu bringen?Warum tut operate
Und numB
nicht aktualisieren?
Lösung
Ich vermute, dass das Problem in dieser Aussage liegt:
ss>>numA>>operate>>numB;
numA
Und numB
sind vom Typ double
.Wenn die Eingabezeile z. B. lautet ans + 10
, diese Anweisung wird versucht zu extrahieren numA
als Double vom Anfang dieser Eingabe an, was fehlschlägt, ohne dass Teile Ihrer Eingabezeichenfolge verbraucht werden.Infolgedessen werden die verbleibenden Werte extrahiert (operate
Und numB
) liefert Ihnen nicht die erwarteten Werte, da beim Extrahieren dieser Werte noch die gesamte Eingabezeichenfolge analysiert werden muss.
Ein Ansatz besteht darin, dass Sie nach dem suchen ans
Fall zuerst, unmittelbar nach dem Lesen der Eingabezeile.Dann können Sie die obige Anweisung bedingt machen und die Werte für die unterschiedlich analysieren ans
Fall.
Eine andere Lösung besteht darin, dass Sie zuerst die Datei extrahieren numA
Und numB
Werte in String-Variablen umwandeln und sie erst dann in Doubles umwandeln, nachdem Sie dies überprüft haben ans
besonderer Fall.