Problem beim Währungsumrechner programmieren
-
Hallo liebes Forum,
Ich habe vor kurzem damit begonnen mir die Programmiersprache C++ eigenhändig beizubringen. Nach dem bekanntmachen mit den kleinen Grundfunktionen der Sprache habe ich mich nun auch mal an mein erstes eigenes Programm gewagt. Herauskommen soll ein Währungsumrecher Euro-Dollar oder Dollar-Euro. Soweit so gut läuft auch alles allerding habe ich das Problem, dass die Konsole nach einer Rechnung jedes mal schließt und die Datei muss neu geöffnet werden. Woran es liegt ist mir auch klar, wird warscheinlich das return 0 am Ende sein. Aber leider bin ich noch nicht darauf gebkommen wie ich im Quellcode dem Programm sage, dass es nach einer Rechnung wieder von vorne anfangen soll so lange bis der Benutzer die Taste B eingibt. Ich hänge meinen Quellcode einfach mal hier an und hoffe, dass irgendjemand mir helfen kann. Vielen Dank im voraus.
#include <iostream>
using namespace std;
int main ()
{
double Euro;
double Dollar;
double Ergebnis;
int Eingabe;
int B;cout << "Euro Dollar Umrechner" << endl;
cout << "Bitte waehlen Sie aus" << endl;
cout << "(1) Euro in Dollar umrechnen" << endl;
cout << "(2) Dollar in Euro Umrechnen" << endl;
cout << "(B) Programm beenden" << endl;
cin >> Eingabe;if (Eingabe==1)
{
cout << " Bitte geben Sie den Wert ein den Sie umgerechnet haben moechten!"<< endl;
cin >> Euro;
Ergebnis = Euro*1.2230;
getchar ();
cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tDollar" << endl;
}
else (Eingabe==2);
cout << " Bitte geben Sie den Wert ein den Sie umgerechnet haben moechten!"<< endl;
cin >> Dollar;
Ergebnis = Dollar/1.2230;
getchar ();
cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tEuro" << endl;return 0;
}
-
Kauf dir ein anständiges Buch.
-
Ein (do) while Schleife
-
Eine Lösung könnte so aussehen
#include <iostream> using namespace std; int main () { // Hier wir setzen uns eine Variable mit der wir testen koennen ob wir ein Beenden angefordert haben, bool Fertig = false; // do{}while(); <-> Bedeutet wir wollen den Programmcode mindestens einmal ausführen egal ob unsere Bedingung wahr ist oder nicht. do { // Anfordern von Resourcen sollte einhergehen mit ihrer Initialisierung (RAII ... Google hilft dir dabei). // Wir setzen alle Variablen auf 0; double Euro = 0; double Dollar = 0; double Ergebnis = 0; int Eingabe = 0; // Ausgabe der Optionenliste cout << "Euro Dollar Umrechner" << endl; cout << "Bitte waehlen Sie aus" << endl; cout << "(1) Euro in Dollar umrechnen" << endl; cout << "(2) Dollar in Euro Umrechnen" << endl; cout << "(3) Programm beenden" << endl; // Lesen der Eingabe cin >> Eingabe; // Abarbeiten der Eingabe if (Eingabe==1) { cout << " Bitte geben Sie den Wert ein den Sie umgerechnet haben moechten!"<< endl; cin >> Euro; Ergebnis = Euro*1.2230; getchar (); cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tDollar" << endl; } else if (Eingabe==2) // ein Semikolon hier war falsch und hatte mehrere Anweisungen ohne geschweifte Klammern { cout << " Bitte geben Sie den Wert ein den Sie umgerechnet haben moechten!"<< endl; cin >> Dollar; Ergebnis = Dollar/1.2230; getchar (); cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tEuro" << endl; } else if (Eingabe == 3) { Fertig = true; } }while(!Fertig); // Wenn Fertig ist nicht gleich true, springe zurück dort wo die Schleife beginnt return 0; }
-
Vielen Dank bin nach langem rumprobieren selber auf die Lösung gekommen. Die beenden Funktion habe ich erst einmal rausgenommen und mit folgendem Code funktioniert es jetzt.
Projektname: Euro-Dollar Umrechner Version: 1.0 Datum: 21.12.2014 */ #include <iostream> using namespace std; int main () { double Euro; double Dollar; double Ergebnis; int Eingabe; cout << "Euro Dollar Umrechner" << endl; cout << "Bitte waehlen Sie aus" << endl; cout <<" Bitte bestätigen Sie ihre Auswahl mit Enter" << endl; cout << "(1) Euro in Dollar umrechnen" << endl; cout << "(2) Dollar in Euro Umrechnen" << endl; cin >> Eingabe; do { if (Eingabe==1) { cout << " Bitte geben Sie den Wert in Euro ein, den Sie umgerechnet haben moechten!"<< endl; cin >> Euro; Ergebnis = Euro*1.2230; getchar (); cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tDollar" << endl; cout << " Wie moechten Sie fortfahren? "<<endl; cout <<"(1) = Euro-Dollar umrechnen, (2) = Dollar-Euro umrechen:"<< endl; cin >> Eingabe; } }while (Eingabe !=2); do { if (Eingabe==2){ cout << " Bitte geben Sie den Wert in Dollar ein, den Sie umgerechnet haben moechten!"<< endl; cin >> Dollar; Ergebnis = Dollar/1.2230; getchar (); cout << " Ihr umgerechneter Betrag sind " << Ergebnis << "\tEuro" << endl; cout << " Wie moechten Sie fortfahren? "<<endl; cout <<"(1) = Euro-Dollar umrechnen, (2) = Dollar-Euro umrechen:"<< endl; cin >> Eingabe; } }while (Eingabe !=1); return 0; }
-
Videonauth schrieb:
// Anfordern von Resourcen sollte einhergehen mit ihrer Initialisierung (RAII ... Google hilft dir dabei). // Wir setzen alle Variablen auf 0; double Euro = 0; double Dollar = 0; double Ergebnis = 0; int Eingabe = 0;Ein Aspekt von RAII ist, dass der Scope so klein wie möglich gehalten werden sollte. Alles am Anfang des Blocks zu definieren ist nicht sehr sinnvoll, zumal 0 als Wert hier keinen Sinn macht.
// Lesen der Eingabe double Eingabe; while (!(cin >> Eingabe)) { // Eingabe nicht erfolgreich cin.ignore(numeric_limits<streamsize>::max(), '\n'); }Ausserdem finde ich hier eine
for(;;)-Schleife besser, da das bedeutet, "ausführen, bis irgendwo eine Abbruchbedingung erfüllt ist". Spart diese Dummy-VariableFertig.
-
raiionaut schrieb:
Ein Aspekt von RAII ist, dass der Scope so klein wie möglich gehalten werden sollte. Alles am Anfang des Blocks zu definieren ist nicht sehr sinnvoll, zumal 0 als Wert hier keinen Sinn macht.
Beim definieren am anfang de Blocks stimm ich dir zu.
Das initialisieren mit Null macht trotzdem immer Sinn. Nimm einfach mal den Fall an, du änderst die Variable nirgends und verlässt dich darauf das du dort eine 0 drinne hast, das schreit schon nach undefiniertem Verhalten.
Und da der Thread-Starter noch lernt ist es eigendich wichtig das zu verinnerlichen, das wenn man einfach eine Variable definiert ohne einen Wert zuzuweisen einem nicht garantiert is, das dort 0 drinne steht oder was man auch immer da drin haben will.
-
Videonauth schrieb:
Das initialisieren mit Null macht trotzdem immer Sinn. Nimm einfach mal den Fall an, du änderst die Variable nirgends und verlässt dich darauf das du dort eine 0 drinne hast, das schreit schon nach undefiniertem Verhalten.
Das auf Null initialisieren braucht man nur, wenn man bei der Benutzung der Variable schon wieder vergessen hat, ob und was da genau drin steht.
Indem man die Variable so spät wie möglich deklariert und gleich einen sinnvollen Wert gibt (hier auf der nächsten Zeile mit
cin>>Eingabe), wird das Zuweisen eines Dummy-Werts überflüssig.