Erweiterte switch-Anweisung innerhalb der while-Schleife?

8

Ich habe gerade mit C ++ angefangen, habe aber einige Vorkenntnisse in anderen Sprachen (leider eine Weile zurück), aber ich habe eine seltsame Situation. Ich mochte es nicht, so viele IF-Anweisungen zu verwenden und wollte Switch / Cases verwenden, da es sauberer zu sein schien, und ich wollte in die Praxis kommen. Aber ..

Sagen wir, ich habe das folgende Szenario (theoretischer Code):

%Vor%

Und das ist mein Problem. Nehmen wir an, ich wollte die WHILE-Schleife verlassen, würde es zwei Break-Anweisungen erfordern?

Das sieht offensichtlich falsch aus:

%Vor%

Also kann ich nur eine IF-Anweisung auf dem 'a' machen, um Pause zu benutzen ;? Fehle ich etwas wirklich einfaches?

Dies würde viele meiner Probleme lösen, die ich gerade habe.

    
Nullw0rm 07.05.2010, 04:51
quelle

9 Antworten

13

Sie könnten einfach die while-Schleife nach einem bool-Wert suchen lassen, der in einer Ihrer case-Anweisungen festgelegt ist.

%Vor%     
Robb 07.05.2010, 04:56
quelle
32

Ich würde den Check in eine andere Funktion umgestalten.

%Vor%     
fredoverflow 07.05.2010 06:55
quelle
5

Ja, C und C ++ haben keine Möglichkeit, "mehrere zerbrechliche Blöcke zu verlassen" (wobei ein "zerbrechlicher Block" irgendeine Schleife oder ein Schalter ist). Problemumgehungen sind goto s und die Verwendung boolescher Variablen, um aufzuzeichnen, ob ein äußerer "zerbrechlicher Block" auch brechen sollte (beides ist nicht elegant, aber das ist Leben).

    
Alex Martelli 07.05.2010 04:54
quelle
5

Zwei break -Anweisungen bringen Sie nicht aus der while-Schleife heraus. Der erste break bringt Sie nur aus der switch Anweisung und der zweite wird nie erreicht.

Was Sie brauchen, ist, die Bedingung der while-Schleife falsch zu machen, vorausgesetzt, es gibt nichts in der Schleife nach der switch -Anweisung. Wenn nach dem Wechsel anderer Code vorhanden ist, sollten Sie die Bedingung nach dem switch und break dort überprüfen.

%Vor%     
Dima 07.05.2010 04:56
quelle
3

Sie könnten versuchen:

  • Verwenden von Flags
  • Verwenden von Gehe zu
  • Den inneren zerbrechlichen Block zu einer Funktion machen
  • Verwenden von Ausnahmen
  • Verwenden von longjump und setjmp

Ein Thema, das dieser Frage sehr ähnlich ist

Ссылка

    
mikek3332002 07.05.2010 05:09
quelle
1

Sie können die Schleife auch in eine Funktion kapseln und die Rückgabe innerhalb des Falls aufrufen, falls das Flag, das die while-Anweisung unterbricht, nicht ausreicht. Es ist nicht eine gute Programmierung für einige Leute, aber wenn Sie die Funktion einfach halten, sehe ich nicht warum nicht.

    
Cristian T 07.05.2010 04:59
quelle
1

Sie könnten an dem benannten Loop-Idiom in C ++ interessiert sein.

%Vor%     
Sumant 09.05.2010 17:07
quelle
0

Sie könnten den Switch durch eine leicht überarbeitete OO-Lösung ersetzen ...

%Vor%     
StackOOverflow 07.05.2010 07:38
quelle
0

Sie könnten Ihren Switch in ein ifsystem umwandeln. Es wird sowieso auf die gleiche Weise kompiliert werden.

    
Thomas Ahle 07.05.2010 05:02
quelle