2016-11-21 2 views
-1

Ich habe an ein sehr einfaches Programm gedacht, das auf die "Befehl" -Funktion zurückläuft, wenn man einen falschen Befehl eingibt. Bevor ich die Entwicklung eines textbasierten RPG-Spiels fortsetze und dies als meine Basis benutze, würde ich gerne wissen, ob es eine schlechte Idee ist, den Großteil von main als While-Schleife einzubinden, wie ich es unten getan habe Eine einfachere Möglichkeit, die Funktion aufzurufen und den Benutzer zurück an den Anfang von main zu stellen, um nach Zeichenfolgenvergleichen zu suchen, ohne die Option "goto" zu verwenden? Vielen Dank im Voraus!Looping zurück zum Befehl C++

+0

Ihre Else ist nicht notwendig, denn wenn If nicht eingegeben wird, wird sofort eine weitere Schleife ausgeführt. –

+0

Ich habe ein wenig Code geändert, um es klarer zu machen. Es springt immer zum Anfang zurück, wenn der Spieler den nächsten Befehl eingibt, nachdem der erste ausgeführt wurde. Brauchen Sie den anderen, um anzugeben, ob der Befehl existiert. Ist das eine schlechte Übung? Benutze normalerweise nicht 'wahr', aber in diesem Fall denke ich, dass es in Ordnung ist. –

+0

Es ist wirklich fraglich, hängt von den Menschen ab. Es ist akzeptabel, wenn Sie wirklich sagen wollen, dass Ihr Programm unendlich laufen kann. Wenn Sie denken, dass eine Exit-Bedingung benötigt wird, sollte sie geändert werden (wie der Befehl exit). –

Antwort

0

Offensichtlich ist Ihr Beispiel sehr einfach (z. B. müssen Sie eine Art "Exit" -Befehl bereitstellen), aber das Muster, das es zeigt, ist völlig in Ordnung. Eine solche Schleife ist die Essenz dessen, was Spieleentwickler normalerweise "Spielschleife" nennen, und GUI-Programmierer nennen sie "Ereignisschleife". Es ist ein grundlegendes Muster für jedes Programm, das weiterlaufen muss, bis es ausdrücklich gesagt wird, dass es im Gegensatz zu seiner Arbeit stoppt und dann automatisch endet.

Wenn Ihr Programm wächst, haben Sie etwas Startup-Code vor der Hauptschleife und etwas Teardown-Code danach und die Schleife selbst wird wahrscheinlich von main() in eine andere Datei verschoben werden. Hier ist ein Barebone-Beispiel, das das Qt-Framework verwendet, das eine GUI-Hauptschleife zeigt.

#include <QApplication> 
#include <MainWindow.hpp> 

int main() 
{ 
    QApplication app; 
    MainWindow win; 
    win.show(); 
    return app.exec(); // <-- main loop happens here 
} 

Offtopic: Über die

if (!command().compare("help")) 

Linie ... Linien wie diese wirklich Bug mich. ;) Schreib es nicht so! Es ist extrem irreführend, weil intuitiv - und besonders beim schnellen Scannen des Codes - es lautet: Wenn Befehl nicht "Hilfe" ist, dann "Command HELP exists!"; und die natürliche Reaktion ist: WTF !? Immer buchstabieren den Wert out Sie gegen sind zu vergleichen, um deutlich zu machen, was passiert:

if (command().compare("help") == 0) // ... 

Oder Ereignis besser, da in diesem Fall alle Informationen, die Sie benötigen, gleich ist oder nicht:

if (command() == "help") // ... 
+0

Ich würde den Offtopic-Teil entfernen. Es basiert total auf Meinungen. Die Art, wie er es geschrieben hat, ist absolut akzeptabel und leicht zu lesen. –