switch verlassen zu menue
-
Hallo miteinander
Ein Mal mehr hoffe ich auf eure geniale Hilfe. Kann mir bitte jemand erklären, wie ich im folgenden Code die cases so verlassen kann, dass ich wieder ins Menue kommme? Hab ich das mit den breaks falsch gemacht?
#include <iostream.h> #include "calc.h" int choice; int main() { cout << "Willkommen bei Calculator 1.2 Beta" << endl; cout << "Bitte waehlen Sie, die Operation," << endl; cout << "die Sie ausfuehren moechten.\n" << endl; cout << "\tMenue:" << endl; cout << "----------------------" << endl; cout << "[1] -> Addition\n"; cout << "[2] -> Subtraktion\n"; cout << "[3] -> Multiplikation\n"; cout << "[4] -> Division\n" << endl; cout << "Geben Sie Ihre Wahl ein: " << endl; cin >> choice; switch(choice) { CRechnung eineRechnung; case 0: cout << "\n\nplease press any key to escape"; cin.sync(); cin.get(); case 1: cout <<"\nWerte fuer eine Summenberechnung eingeben:" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSumme(); eineRechnung.Ausgeben(); break; case 2: cout <<"\nWerte fuer eine Subtraktion eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSubtraktion(); eineRechnung.Ausgeben(); break; case 3: cout <<"\nWerte fuer eine Multiplikation eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneFaktor(); eineRechnung.Ausgeben(); break; case 4: cout <<"\nWerte fuer eine Division eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneDivision(); eineRechnung.Ausgeben(); break; default: cout <<"\nDies ist keine gueltige Eingabe" << endl; break; } }Natürlich freue ich mich auch über jegliche sonstige Anmerkungen und Verbesserungen zu meinem Code.
Vielen Dank für eure Hilfe
greetz
nemico
-
goto oder ne schleife(for, do, do... while)
es gibt ne menge möglichkeiten 
oder du machst ne extra funktion für das menu
-
du willst dass sich etwas wiederholt und da ist eine schleife oft eine gute wahl.
du packst das menu einfach in eine nette schleife und schon springst du am ende des programms wieder zum menu zurueck

-
...leider bin ich noch absoluter Anfänger und weiss nun nicht genau,
was ich mit der schleife anfangen soll, bzw. wo ich sie genau setzen muss.
Könnt ihr mir das noch ein wenig genauer erklären?Vielen Dank für eure Hilfe
Eure Antworten kamen ja echt super schnell!gruss,
nemico
-
will mal nicht so sein
#include <iostream.h> #include "calc.h" int choice; int main() { choice = 1; while ( choice ) { cout << "Willkommen bei Calculator 1.2 Beta" << endl; cout << "Bitte waehlen Sie, die Operation," << endl; cout << "die Sie ausfuehren moechten.\n" << endl; cout << "\tMenue:" << endl; cout << "----------------------" << endl; cout << "[0] -> Ende\n"; cout << "[1] -> Addition\n"; cout << "[2] -> Subtraktion\n"; cout << "[3] -> Multiplikation\n"; cout << "[4] -> Division\n" << endl; cout << "Geben Sie Ihre Wahl ein: " << endl; cin >> choice; switch(choice) { CRechnung eineRechnung; case 0: cout << "\n\nplease press any key to escape"; cin.sync(); cin.get(); break; case 1: cout <<"\nWerte fuer eine Summenberechnung eingeben:" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSumme(); eineRechnung.Ausgeben(); break; case 2: cout <<"\nWerte fuer eine Subtraktion eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSubtraktion(); eineRechnung.Ausgeben(); break; case 3: cout <<"\nWerte fuer eine Multiplikation eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneFaktor(); eineRechnung.Ausgeben(); break; case 4: cout <<"\nWerte fuer eine Division eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneDivision(); eineRechnung.Ausgeben(); break; default: cout <<"\nDies ist keine gueltige Eingabe" << endl; break; } } }
-
ZuK schrieb:
will mal nicht so sein
fein. du hast den besten code gebaut, der in lehrbüchern zu finden ist.

ich mag unnötigerweise noch hinzufügen, daß ich lehrbuchcode oft suboptimal finde und folgenden dagegenstellen.
#include <iostream.h> #include "calc.h" int choice; int main() { for(;;) { cout << "Willkommen bei Calculator 1.2 Beta" << endl; cout << "Bitte waehlen Sie, die Operation," << endl; cout << "die Sie ausfuehren moechten.\n" << endl; cout << "\tMenue:" << endl; cout << "----------------------" << endl; cout << "[0] -> Ende\n"; cout << "[1] -> Addition\n"; cout << "[2] -> Subtraktion\n"; cout << "[3] -> Multiplikation\n"; cout << "[4] -> Division\n" << endl; cout << "Geben Sie Ihre Wahl ein: " << endl; cin >> choice; switch(choice) { CRechnung eineRechnung; case 0: cout << "\n\nplease press any key to escape"; cin.sync(); cin.get(); return 0; case 1: cout <<"\nWerte fuer eine Summenberechnung eingeben:" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSumme(); eineRechnung.Ausgeben(); break; case 2: cout <<"\nWerte fuer eine Subtraktion eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneSubtraktion(); eineRechnung.Ausgeben(); break; case 3: cout <<"\nWerte fuer eine Multiplikation eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneFaktor(); eineRechnung.Ausgeben(); break; case 4: cout <<"\nWerte fuer eine Division eingeben" << endl; eineRechnung.Erfassen(); eineRechnung.BerechneDivision(); eineRechnung.Ausgeben(); break; default: cout <<"\nDies ist keine gueltige Eingabe" << endl; break; } } }begründung: für mich sieht das programm nach eine schleife aus, die immer wieder sich wiederholt (endlosschleife), außer im ungewöhnlichen fall, daß jemand die 0 drückt (dann ist in diesem case das return).
die herangehensweise, von vornherein wissen zu müssen, unter welchen umständen das programm aufhört, ist mir fremd. ich müßte den fall, daß jemand die 0 drückt, zugleich im case 0 und in der schleifenbedinbgung berücksichtigen. das ist mir fast zu denk-aufwändig. und ich bin mir fast sicher, daß mit mehrern austeigsgründen ich bei dem lehrbuch-design voll die panik kriegen würde.
@ZuK: soll keine mecker sein. dein code ist bestens. aber wir lösen uns (oder bin ich allein?) in c++ zur zeit recht heftig von alten heiligen regeln des strukturierten programmierens, wodurch der stil auch einfachster schleifen gar arg mutiert.
-
volkard schrieb:
@ZuK: soll keine mecker sein. dein code ist bestens. aber wir lösen uns (oder bin ich allein?) in c++ zur zeit recht heftig von alten heiligen regeln des strukturierten programmierens, wodurch der stil auch einfachster schleifen gar arg mutiert.
Ich möchte dazu anmerken dass ich, hätte ich den ganzen code geschrieben, wahrscheinlich etwas ähnliches gemacht hätte ( while(true) ? ). Irgendwie war die Ändeung so am einfachsten. Zumindest erkennt man so am schnellsten was ich da dazugebaut habe.
-
Mal ne frage zum thema schleifen
ist es schlimm wenn man nur for schleifen nuzt oder sollte ich auch brav do und do... while schleifen nutzen? oder ist das doch egal?
-
MartinMilbret schrieb:
Mal ne frage zum thema schleifen
ist es schlimm wenn man nur for schleifen nuzt oder sollte ich auch brav do und do... while schleifen nutzen? oder ist das doch egal?man sollte for-schleifen benutzen, wenn vorher klar ist, von wo bis wo die schleife läuft und keiner an den schleifenvariablen rumfummelt.
for(int i=0;i<anzahl;++i)
tuwas;for(vector<double>::iterator i=v.begin();i=!v.end();++i)
tuwas;for(Node* pos=anchor;pos!=0;pos=pos->next)
tuwas;man sollte while nehmen, wenn das nicht so ist.
for(int i;cin<<i;cout>>i)//autsch!
;man sollte tunlichst do nehmen, wenn folgender code auftaucht
if(bedingung)
while(bedingung)//gleiche bedingung wie oben
tuwas;ansonsten fristet do ein schattendasein, nicht so selten wie switch, goto oder break und seltener als continue, protected oder virtual.
-
hey das ist ja toll!
Ich danke euch vieeelmals für eure Hilfe!
Das ist echt super!DANKE
gruss,
nemico
-
Kleine Anmerkung: Ich bezweifle irgendwie, daß ein Compiler das "CRechnung eineRechnung;" am Anfang des switch unkommentiert stehen lässt - die Anweisung (Konstruktor-Aufruf) steht vor allen case-Blöcken und wird damit garantiert übergangen.