GELÖST
-
Also, ich habe mit einem einfachen Programm angefangen was 2 Zahlen addieren subtrahieren, multiplizieren oder dividieren soll, mein Problem ist jetzt nicht das ich das nicht gleichzeitig ausgeben kann sondern,
dass ich über eine Auswahl im Grunde das Programm starte,
also z.B. 1 dann mit a/A addieren auswähle und er dann halt nur addiert.
Hier der Code:#include <iostream> using namespace std; int main() { double x, y; double Zahl; string Taste; cout << "Geben Sie eine 1 zum starten des Programmes ein. "; cin >> Zahl; while (Zahl == 1) { cout << "a/A Addition, s/S Subtraktion, m/M Multiplikation, d/D Division: " << endl; cin >> Taste; if (Taste == "a" || Taste == "A") { cout << "Geben Sie 2 Zahlen ein:\n" << "1.Zahl: "; cin >> x; cout << "2.Zahl: "; cin >> y; cout << "Die Zahl lautet: " << x + y << endl; }Das gleiche habe ich halt noch für subtraktion division und multiplikation gemacht, also mit der If-Abfrage
Danke im voraus

-
Hallo auf dem Board! Was war noch gleich Deine Frage?
-
Dankeschön, also meine Frage ist wie ich den Code so schreiben kann das ich am Anfang direkt auswählen kann ob ich das Programm starten oder beenden möchte
und nach jeder Rechnung diese Abfrage erneut kommt.
Also sagen wir ich starte das Programm, möchte addieren gebe beide Zahlen ein, kriege das Ergebnis und möchte danach das Programm beenden über die Taste f z.B.
Wie kann ich das machen?
-
while(true) { cout << "blalblalblalala"; cin >> input; if(input == "f") break; cout << "blablabla"; cin >> .... }So in der Art?
-
Ja genau, der führt ja den Code solange aus bis man die Taste f eingibt und beendet das Programm dann
-
Sieht aus als hätte ich es jetzt gelöst:
while (Zahl == 1) { cout << "Geben Sie irgendeine Zahl zum starten ein oder eine 2 zum beenden: "; cin >> Taste; if (Taste == "2") { break; } else { cout << "a/A Addition,\n " << "s/S Subtraktion,\n " << "m/M Multiplikation,\n " << "d/D Division: "; cin >> Taste; if (Taste == "a" || Taste == "A") { cout << "\nGeben Sie 2 Zahlen ein:\n" << "1.Zahl: "; cin >> x; cout << "2.Zahl: "; cin >> y; cout << "\tDie Zahl lautet: " << x + y << endl; }Allerdings gibt es jetzt noch das Problem das sollte ich nach dem Start einen anderen Buchstaben oder Zahl eingebe das er dies endlos wiederholt ohne das ich die Möglichkeit habe es abzubrechen über eine Taste oder so.
Und noch etwas, könnte man den Code irgendwie eleganter schreiben?
Also kürzer.
-
Ich sehe im Moment nicht, inwiefern das zu einer Endlosschleife führt?
Und zu der anderen Frage: Ich würde den Abbruch als Funktion wie Addieren und Subtrahieren werten, statt einer expliziten Nachfrage für Abbruch jeden Durchlauf...Und zum schöner machen: Man kann das erstmal in Funktionen zerlegen, eine Funktion besorgt 2 Argumente etc. macht Fehlerbehandlung. Die mathematischen Operationen bekommen dann nur 2 Argumente... Dann könnte man die Menüstruktur funktionalisieren etc...
Aber ich würde da nicht so viel Energie reinstecken, weil ein Programm, das Terme ala "(3+3/2)*14" auswerten kann, irgendwie praxisgerechter ist und weniger Boilerplate benötigt... Da geht ein String rein und eine Zahl kommt raus... Oder halt eine Fehlermeldung.
-
Ok, vielen Dank auf jeden Fall und das führt bei mir zu der Endlosschleife wenn ich das Programm starte, Addition z.B. auswähle und da dann nen Buchstaben eingebe^^
Ich werde sowas aber mal versuchen, also mit den Termen usw.
-
Nomander schrieb:
while (Zahl == 1) { // .... }Die Abbruchbedingung für while wird nicht ermittelt. Entweder läuft die Schleife gar nicht (Zahl != 1) oder endlos.
Ich empfehle zum Üben so etwas:
int max = 10, is = 0; while (...) { is++; if(is > max) break; // ... hier schaust du dir genau an, was in der Schléife passiert! }
-
Ok danke, in der Schleife zählt er ja wenn ich das richtig verstehe so lange hoch bis is größer als 10 ist und danach bricht er ab.
-
Nomander schrieb:
Ok, vielen Dank auf jeden Fall und das führt bei mir zu der Endlosschleife wenn ich das Programm starte, Addition z.B. auswähle und da dann nen Buchstaben eingebe^^
Ich werde sowas aber mal versuchen, also mit den Termen usw.
Schau dir dazu z.B. das code Beispiel hier an: http://msdn.microsoft.com/en-us/library/71t65ya2.aspx
Dein Problem wird wohl sein, wenn cin etwas nicht richtig einlesen kann.
Gehen wir mal deinen code durch:
while (Zahl == 1) { cout << "Geben Sie irgendeine Zahl zum starten ein oder eine 2 zum beenden: "; cin >> Taste; //1. Durchlauf: 3 eingeben 2.Durchlauf: cin ist in einem Fehlerzustand! cin macht nichts. if (Taste == "2") //1. Durchlauf: Taste ist "3" - Ok! 2.Durchlauf: Taste hat sich nicht geändert! Also geht die Schleife weiter { break; } else { cout << "a/A Addition,\n " << "s/S Subtraktion,\n " << "m/M Multiplikation,\n " << "d/D Division: "; cin >> Taste; //1.Durchlauf: a eingeben 2.Durchlauf: cin Fehlerzustand, nichts passiert if (Taste == "a" || Taste == "A") { cout << "\nGeben Sie 2 Zahlen ein:\n" << "1.Zahl: "; cin >> x; //1. Durchlauf: a eingeben => Fehler! 'a' ist keine Zahl, cin geht in den Fehlerzustand über und 'a' bleibt in cin erhalten, wird nicht extrahiert 2.Durchlauf: cin Fehlerzustand cout << "2.Zahl: "; cin >> y; //cin ist in einem Fehlerzustand! Nichts passiert. cout << "\tDie Zahl lautet: " << x + y << endl; }