Wie beende ich eine Schleife früh in C?

8

Ich habe ein grundlegendes C-Programm, das eine Nummer erzeugt und der Benutzer muss es erraten (yup, du hast es schon gesagt: Hausaufgabe). Ich bin in der Lage, so ziemlich alles zu bekommen, daher bin ich ein bisschen stolz, aber ich bin offen für alle Fehler, die ich gemacht habe, natürlich lerne ich immer noch. Meine zwei wichtigsten Fragen sind

  1. Wie kann ich dieses Programm vorzeitig beenden, wenn der Benutzer die richtige Nummer ausgewählt hat, bevor die Anzahl der Versuche erreicht wurde? Und
  2. Irgendwelche offensichtlichen Fehler, die ein Guru erkennen kann, dass ich nicht mit meinem Code bin?

Ich versuche so gut wie möglich zu programmieren:)

%Vor%     
HollerTrain 02.10.2009, 01:03
quelle

6 Antworten

15

Verwenden Sie die break -Anweisung, um aus einer Schleife zu springen: In diesem Fall ist das vielleicht nicht das, was Sie wollen, denn sobald Sie die Schleife verlassen, sehen Sie sofort die Nachricht "Sie verlieren". Sie müssen möglicherweise Ihr Programm umstrukturieren, um dies zu berücksichtigen.

Versuchen Sie etwas wie folgt:

%Vor%     
Andrew Hare 02.10.2009 01:05
quelle
9

Sie suchen den Befehl break .

%Vor%

Diese Ressource scheint für Sie sehr hilfreich zu sein.

Als Randnotiz: Ihr "Sie verlieren" -Text wird immer angezeigt, egal was passiert. Vielleicht möchten Sie das innerhalb der do {} Schleife auswerten.

Immer einen Schritt vor mir mit den Posts / Bearbeitungen zu dieser Antwort Andrew Hare!

    
Nathan Taylor 02.10.2009 01:05
quelle
9

Warum sollte die while-Bedingung nicht auf die Schätzung des Benutzers gesetzt werden? Etwas wie:

%Vor%     
Anthony 02.10.2009 01:11
quelle
9

Hier sind drei Möglichkeiten. Lies über sie !!! (Gilt als schädlich)

%Vor%     
Tom 02.10.2009 01:14
quelle
1

Ich sehe keine "offensichtlichen Fehler", die frühere Poster nicht erwähnt haben, außer der Tatsache, dass Sie mit der Pause nicht mehr sowohl "i" als auch "numGuess" brauchen, da sie immer denselben Wert hätten. Verwenden Sie einfach numGuess statt "i" im while-Zustand.

Aber ich würde Ihnen wärmstens empfehlen, Ihren Code lesbarer zu machen - die beste Zeit, sich an die Gewohnheit eines guten Programmierstils zu gewöhnen, ist jetzt, bevor Sie schlechte Angewohnheiten erwerben und verfestigen.

  • Verwenden Sie immer selbstbeschreibende Identifikatoren (Variablen- / Funktionsnamen). Z.B. Ihr "x" sollte wirklich "maxGuesses" heißen.

  • Sparen Sie nicht auf Leerraum. Z.B. "} während (i & lt; x);" sollte "} while (i & lt; x);"

  • sein
  • Sie scheinen sich bereits angewöhnt zu haben, keine Kommentare zu verschwenden - gut !!!

    Denken Sie daran, dass die Kommentare immer den Zweck hinter dem, was der Code tut, anstatt der Mechanik, wie er es tut, beschreiben sollten, es sei denn, die Mechanik ist so trickreich und clever, dass sie auch erklärt werden muss.

Der Grund dafür ist zweifach:

  • 80-90% der Entwicklungszeit / -erträge werden normalerweise für die Pflege von vorhandenem Code aufgewendet, der von Ihnen selbst oder von jemand anderem stammt. Diese Aufgabe ist VASTly einfacher mit gut dokumentiertem und leicht lesbarem Code. (Sie haben keine Ahnung, wie viel Hirnschaden jemand aushalten kann, wenn er um 02.00 Uhr während des Produktionsproblems unbekannten Code liest, nur weil der Bozo, der ihn geschrieben hat, den Code nicht konsequent eingedrückt hat).

  • Wenn Sie gut dokumentierten und lesbaren Code haben, ist es einfacher für Sie, ihn zu schreiben, da er Ihre eigenen Gedanken klärt und dumme Tippfehler verhindert ("oups, ich wollte x anstelle von y verwenden") / p>

DVK 02.10.2009 02:03
quelle
0

Im Falle Ihres Programms ist der beste Weg, dies zu erreichen, wahrscheinlich

void beenden (int status);

(include stdlib.h)

nach dem Drucken "Sie gewinnen"

Im Allgemeinen können Sie das Schlüsselwort "break" verwenden, um eine Schleife jederzeit zu beenden. Dies hat in Ihrem Fall nicht die gewünschte Wirkung, denn es würde weiterhin "Sie verlieren ..." drucken. Wenn Sie "break" verwenden möchten, müssten Sie eine "if" -Anweisung um das Bit "you loose ..." setzen und überprüfen, ob der Benutzer tatsächlich gewonnen hat.

    
Carsten 02.10.2009 01:10
quelle

Tags und Links