Switch Anweisung nicht verlassen
-
Servs zusammen,
hab folgendes Problem:
/* * Beispiel für switch anhand der vier Grundrechenanrten */ #include<iostream> using namespace std; int main() { float zahl_1, zahl_2, erg; char wahl; cout << "\n\n*** Rechner ***\n\n"; cout << "Bitte die erste Zahl eingeben: "; cin >> zahl_1; cout << "Bitte die zweite Zahl eingeben: "; cin >> zahl_2; cout << "\nBitte waehlen Sie: <a>ddieren\n" << "\t\t <s>ubtrahieren\n" << "\t\t <m>ultiplizieren\n" << "\t\t <d>ividieren\n"; cin >> wahl; switch(wahl) { case 'a': erg = zahl_1 + zahl_2; cout << "Ergebnis: " << zahl_1 << " + " << zahl_2 << " = " << erg << endl; break; case 's': erg = zahl_1 - zahl_2; cout << "Ergebnis: " << zahl_1 << " - " << zahl_2 << " = " << erg << endl; break; case 'm': erg = zahl_1 * zahl_2; cout << "Ergebnis: " << zahl_1 << " * " << zahl_2 << " = " << erg << endl; break; case 'd': if(zahl_2 == 0) cout << "Ich mag heute nicht durch null dividieren!"; else { erg = zahl_1 / zahl_2; cout << "Ergebnis: " << zahl_1 << " / " << zahl_2 << " = " << erg << endl; } break; default : cout << "Wer nicht will, der hat schon mal!\n\n"; } return 0; }
Nun will ich das wenn er mir ein Ergebnis ausspuckt, er mir trotzdem die Möglichkeit bietet eine andere Grundrechenart durchzuführen. Auf gut Deutsch, er soll die Switch Anweisung nicht verlassen, sondern nach jedem abgearbeitetem Case die Switch Anweisung nochmal ausführen
Ich hab versucht die breaks mit continue zu ersetzen, doch da hat mir mein Compiler folgendes erzählt: Schluesselwort 'continue' ungueltig
Wieso will er es nicht annehmen ? Bzw. wie kann ich an mein Ergebnis kommen ?Bin wie immer über zahlreiche Antworten sehr dankbar
Xecutor
-
Wie wäre es mit einer while-Schleife?
Wenn du das ganze auch noch in andere Funktionen auslagerst, wirds auch noch "schön".
-
Danke dir Artchi,
wusste ich es doch das ich einen Denkfehler hatte *g*
Hier der überarbeitete Code:/* * Beispiel für switch anhand der vier Grundrechenanrten */ #include<iostream> using namespace std; int main() { float zahl_1, zahl_2, erg; char wahl; bool rechnen = true; cout << "\n\n*** Rechner ***\n\n"; cout << "Bitte die erste Zahl eingeben: "; cin >> zahl_1; cout << "Bitte die zweite Zahl eingeben: "; cin >> zahl_2; while(rechnen) { cout << "\nBitte waehlen Sie: <a>ddieren\n" << " \t\t <s>ubtrahieren\n" << " \t\t <m>ultiplizieren\n" << " \t\t <d>ividieren\n" << " \t <b>eenden\n"; cin >> wahl; switch(wahl) { case 'a': erg = zahl_1 + zahl_2; cout << "Ergebnis: " << zahl_1 << " + " << zahl_2 << " = " << erg << endl; break; case 's': erg = zahl_1 - zahl_2; cout << "Ergebnis: " << zahl_1 << " - " << zahl_2 << " = " << erg << endl; break; case 'm': erg = zahl_1 * zahl_2; cout << "Ergebnis: " << zahl_1 << " * " << zahl_2 << " = " << erg << endl; break; case 'd': if(zahl_2 == 0) cout << "Ich mag heute nicht durch null dividieren!"; else { erg = zahl_1 / zahl_2; cout << "Ergebnis: " << zahl_1 << " / " << zahl_2 << " = " << erg << endl; } break; case 'b': rechnen = false; break; default : cout << "Wer nicht will, der hat schon mal!\n\n"; } } return 0; }
Aber sag mal was meinst du mit "Wenn du das ganze auch noch in andere Funktionen auslagerst, wirds auch noch "schön"." ?
Xecutor
-
er meint, dass du dein programm ein wenig mehr unterteilen solltest, z.b. so:
aus_asm_main: enter 0, 0 pusha mov augen, nextPost ; im nächsten post popa mov eax, 0 leave ret
dann hast am ende vielleicht mehrere funktion, die passen aber alle auf eine (bildschirm-)seite, und sind so leichter verständlich. zusätzlich wird die fehlersuche erleichtert.
mfg
-
/* * Beispiel für switch anhand der vier Grundrechenanrten */ #include<iostream> using namespace std; void zahl(float *a, float *b) { cout << "\n\n*** Rechner ***\n\n"; cout << "Bitte die erste Zahl eingeben: "; cin >> *a; cout << "Bitte die zweite Zahl eingeben: "; cin >> *b; } char waehlen(void) { cout << "\nBitte waehlen Sie: <a>ddieren\n"; cout << " \t\t <s>ubtrahieren\n"; cout << " \t\t <m>ultiplizieren\n"; cout << " \t\t <d>ividieren\n"; cout << " \t <b>eenden\n"; char c; // was für ein m*st! aber ich wollte es ja in funktionen unterteilen... cin >> c; return c; } int main() { float zahl_1, zahl_2, erg; zahl(&zahl_1, &zahl_2); char wahl; while(true) { wahl = waehlen(); switch(wahl) { case 'a': erg = zahl_1 + zahl_2; cout << "Ergebnis: " << zahl_1 << " + " << zahl_2 << " = " << erg << endl; break; case 's': erg = zahl_1 - zahl_2; cout << "Ergebnis: " << zahl_1 << " - " << zahl_2 << " = " << erg << endl; break; case 'm': erg = zahl_1 * zahl_2; cout << "Ergebnis: " << zahl_1 << " * " << zahl_2 << " = " << erg << endl; break; case 'd': if(zahl_2 == 0) cout << "Ich mag heute nicht durch null dividieren!"; else { erg = zahl_1 / zahl_2; cout << "Ergebnis: " << zahl_1 << " / " << zahl_2 << " = " << erg << endl; } break; case 'b': return 0; default : cout << "Wer nicht will, der hat schon mal!\n\n"; } } return 0; }
so, fertig
mfg
-
Danke dir terraner für Antwort und Source
Das mit dem Unterteilen ist aber nur sinnvoll wenn man an größeren Projekten arbeitet oder sehe ich das falsch ?
Weil für diese simple Aufgabe den Code gleich so aufzupuschen, ich weiß ja nicht oder gehört dieses Unterteilen zum guten Programmierstil ?Xecutor
-
bei so kleinen programmen kann man das kurz mal vergessen, aber ansonsten sollte man es oft einsetzen, unter anderem auch weil alle veriablen beim verlassen der funktion zerstört werden. weiterhin hat man dann viele kleine programm teile, die man leicht integrieren bzw rausschmeissen kann (trifft zwar mehr auf klassen und templates zu, aber egal).
mfg
-
@xecuter ja das ist guter programmierstil,und nicht nur das, der code ist wiederverwendbar und noch oben drauf übersichtlich
@terraner und nu erklär mir mal was der asm hier zu suchen hat^^