Problem bei der Switch Verzweigung
-
@wob sagte in Problem bei der Switch Verzweigung:
@Jockelx sagte in Problem bei der Switch Verzweigung:
Die würden sich eh nur ärgern, wenn sie "Standard"-Pommes bestellen und nen Burger kriegen.
@adii950 schrieb
cout << "Welches Getreank wollen Sie wollen? " << endl;
Dafür können sie die gewollten Getränke wollen
Die ungewollten bekommen sie ja zusätzlich auch noch.
@adii950 : Was wir alle damit sagen wollen: Dein Code hat nicht nur bei der
switch
-Verzweigung Probleme, sondern die grundlegende Idee deines Datenmodells bedarf einer Überarbeitung. Du musst genauer überlegen, was wie zusammen gehört, was die Dinge bedeuten, und welche Werte sie haben können.
-
@SeppJ Achso okay danke dir verstehe du meinst ich sollte vor das Programmieren mir Gedanken machen wie man die Aufgabe ins Programmieren umsetzt oder?
-
@wob naja ich dachte mir es gibt ja verschiedene Pommes Größen (Portionen) z.B kleine Pommes, Mittel Pommes und XXL Pommes
-
@DocShoe Achso okay verstehe ich das heißt das ich immer bei switch case diese blocks {......
}
machen soll zwischen den verschiedenen cases also so:
char eingabe; switch(eingabe){ case'h':{ cout << "Hallo Wolrd " << endl; } break; unsw . . . . . }
-
@adii950 sagte in Problem bei der Switch Verzweigung:
@SeppJ Achso okay danke dir verstehe du meinst ich sollte vor das Programmieren mir Gedanken machen wie man die Aufgabe ins Programmieren umsetzt oder?
Ja! Kommt dir das so komisch vor?
In dem Sinne auch:
@adii950 sagte in Problem bei der Switch Verzweigung:
@wob naja ich dachte mir es gibt ja verschiedene Pommes Größen (Portionen) z.B kleine Pommes, Mittel Pommes und XXL Pommes
Das bildet dein Programm überhaupt nicht nach! Du machst quasi so etwas wie
int sechs_komma_fuenf = 'g';
-
@DocShoe sagte in Problem bei der Switch Verzweigung:
Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.
[klugscheiss]
Doch, klar darf man das. Darf nur danach kein weiteres Label mehr kommen
[/klugscheiss]
-
@adii950 sagte in Problem bei der Switch Verzweigung:
@DocShoe Achso okay verstehe ich das heißt das ich immer bei switch case diese blocks {......
}
machen soll zwischen den verschiedenen casesDas verhindert zwar erstmal den Fehler, aber in der Regel ist es besser, die cases sehr kurz zu halten und dort einfach keine Variablen zu deklarieren. Wenn du in einem Case Variablen brauchst, mach eine Funktion daraus und rufe im Case nur deine Funktion auf (+ break).
-
@hustbaer sagte in Problem bei der Switch Verzweigung:
@DocShoe sagte in Problem bei der Switch Verzweigung:
Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.
[klugscheiss]
Doch, klar darf man das. Darf nur danach kein weiteres Label mehr kommen
[/klugscheiss]Interessant... wusste ich auch noch nicht.
-
@DocShoe sagte in Problem bei der Switch Verzweigung:
Du darfst ohne eigenen Scope keine Variablen in einem case-block erzeugen.
Die Variablen "leben" dann aber nur in dem Scope. Außerhalb sind sie unbekannt.
-
@DocShoe
Fürswitch
undcase/default
Labels gelten diesbezüglich die selben Regeln wie fürgoto
und "normale" Labels: ein Sprung darf keine Initialisierung überspringen.Und wenn nach der Initialisierung keine weiteren
case/default
Labels mehr kommen, dann gibt es halt auch keinen Sprung der die Initialisierung überspringen könnte.Und da es um Initialisierung geht, ist auch das "überspringen" von Definitionen von nicht-initialisierten Variablen erlaubt. Also das ist z.B. erlaubt (wenn auch Sinnfrei):
int foo(int n) { switch (n) { case 1: int i; return 42; default: i = 23; return i; } }
Sobald du aber mit
int i = 0;
initialisierst, ist es nicht mehr erlaubt.switch
ist sowieso ein lustiges Teil. Fall's du's noch nicht kennst, google mal "Duff's device".
-
@DirkB stimmt verstehe danke dir