Erweiterte switch-Anweisung in while-Schleife?
Ich habe gerade angefangen, C++, haben aber einige Vorkenntnisse zu anderen Programmiersprachen (vb eine Weile zurück, leider), haben aber eine sonderbare Situation. Ich mochte so viele IF-Anweisungen und verwenden wollte-Schalter/Fällen, wie es schien sauberer, und ich wollte in die Praxis.. Aber..
Können sagen, ich habe das folgende Szenario (theorietical code):
while(1) {
//Loop can be conditional or 1, I use it alot, for example in my game
char something;
std::cout << "Enter something\n -->";
std::cin >> something;
//Switch to read "something"
switch(something) {
case 'a':
cout << "You entered A, which is correct";
break;
case 'b':
cout << "...";
break;
}
}
... Und das ist mein problem. Können sagen, ich wollte das beenden der WHILE-Schleife, würde Es erfordern zwei break-Anweisungen?
Diese offensichtlich falsch aussieht:
case 'a':
cout << "You entered A, which is correct";
break;
break;
Also kann ich nur eine IF-Anweisung, auf die 'a' zu verwenden, brechen;? Bin ich etwas fehlt wirklich einfach?
Diese lösen würde eine Menge meiner Probleme, die ich jetzt haben.
- Aufgrund des Titels, dachte ich, es wäre ein Duff ' s Device in Frage. NÖ. Gibt es eine
boring
tag für das? - Froh, dass deine Frage gelöst wurde, diese Dinge sind nicht die am meisten Spaß macht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Man könnte einfach die while-Schleife prüfen, ob ein boolescher Wert, der gesetzt ist in deinem Fall Aussagen.
Ich würde umgestalten der check-in anderer Funktion.
switch(input)
zuswitch(tolower(input))
.Ja, C und C++ haben keine Möglichkeit zu sagen, "exit-multiple, zerbrechlich Blöcke" (wo eine "zerbrechliche block" ist eine Schleife oder switch). Problemumgehungen enthalten
goto
s verwenden von booleschen Variablen zu erfassen, ob eine äußere "zerbrechlich block" sollte auch brechen (weder elegant, aber so ist das Leben).Zwei
break
Aussagen kommt man nicht aus der while-Schleife. Die erstenbreak
bekommt man nur aus derswitch
- Anweisung und die zweite wird nie erreicht.Was Sie brauchen, ist, um die Bedingung der while-Schleife false ist, vorausgesetzt, dass es nichts in der Schleife nach der
switch
- Anweisung. Wenn es anderen code, der nach dem Umschalten, sollten Sie überprüfen den Zustand nach derswitch
, undbreak
es.Könnten Sie versuchen:
Thema sehr ähnlich zu dieser Frage
http://www.gamedev.net/community/forums/topic.asp?topic_id=385116
Können Sie auch Kapseln die Schleife in eine Funktion und rufen Sie zurück in der Tasche, für den Fall, dass die Flagge bricht die while ist nicht genug.
Es ist kein guter Programmierstil, für einige Leute, aber, wenn Sie die Funktion einfach ich sehe nicht, warum nicht.
Könnten Sie daran interessiert sein, die namens-Schleife idiom in C++.
Könnten Sie ersetzen Sie den Schalter mit einer etwas over-engineered OO Lösung...
Könnten Sie ändern Ihr Wechsel zu einem ifsystem. Es wird kompiliert, um die gleiche Sache sowieso.
if/else-if
obwohl, so dass Sie (oder jemand anderes) es nicht sehen später, und ändern Sie es zu den offensichtlichen switch-Anweisung, damit zu brechen alles. Kein Wortspiel beabsichtigt.switch
oft umgesetzt mit der jump-Tabellen, die sind wahrscheinlich schneller, wenn es vielecase
s.