Wie man spezielle Loop-Steuerungen in C ++ Nehmen

C ++ definiert zwei spezielle Strömungssteuerbefehle bekannt als Unterbrechung und fortsetzen. Manchmal für die Bedingung tritt weder am Anfang einer Schleife endet noch das Ende der Schleife, aber in der Mitte. Betrachten wir ein Programm, das vom Benutzer eingegebene Zahlen von Werten akkumuliert. Die Schleife endet, wenn der Benutzer eine negative Zahl eingibt.

Die Herausforderung bei diesem Problem ist, dass das Programm die Schleife nicht verlassen, bis der Benutzer einen Wert eingegeben hat, muss jedoch verlassen, bevor der Wert der Summe addiert wird.

Für diese Fälle definiert die C ++ Unterbrechung Befehl. Wenn angetroffen wird, die Unterbrechung Ursachen steuern sofort die Stromschleife zu verlassen. Die Steuerung geht von dem Unterbrechung Anweisung an die Anweisung unmittelbar nach der geschlossenen Klammer am Ende der Schleife.

Das Format der Unterbrechung Befehle ist wie folgt:

while (Bedingung) // funktioniert genauso gut in for-Schleife brechen {if (einige andere Bedingung) {// Break- die Schleife verlassen}} // Steuerung geht hier, wenn die // Programm der Pause begegnet

Mit dieser neuen Bewaffnet Unterbrechung Befehl, eine Lösung für das Speicherproblem erscheint als das Programm BreakDemo:

// BreakDemo - bis die Benutzereingabe eine Folge von numbers.// die Summe Weiter // dieser Zahlen zu akkumulieren // tritt eine negative Zahl # enthalten. #einschließen #einschließen using namespace std-int main (int nNumberofArgs, char * pszArgs []) {// Eingang der Schleife countint Akkumulator = 0-cout lt; lt; "Dieses Programm Summen Werte vom Benutzer n" lt; lt; "Terminate durch eine negative Zahl eingeben" lt; lt; Endl - // Schleife "für immer" für (-) {// holen andere numberint nValue = 0-cout lt; lt; "Geben Sie die nächste Nummer:" -cin >> nValue - // wenn sie negativ ist ... if (nValue lt; 0) {// ... dann exitbreak -} // ... fügen Sie sonst die Rufnummer der accumulatoraccumulator + = nValue -} // jetzt, dass wir die Schleife // Ausgabe des akkumulierten resultcout verlassen haben lt; lt; " NDie insgesamt ist" lt; lt; accumulatorlt; lt; Endl - // warten, bis der Benutzer bereit ist, bevor Programm beendet // dem Benutzer zu ermöglichen, das Programm resultscout zu sehen lt; lt; "Drücken Sie die Eingabetaste, um fortzufahren ..." lt; lt; Endl-cin.ignore (10, ' n') - cin.get () - Rückkehr 0-}

Nach der Erläuterung der Regeln für den Benutzer (die Eingabe einer negativen Zahl zu beenden und so weiter), geht das Programm, was wie eine unendliche aussieht für Schleife. Einmal innerhalb der Schleife, BreakDemo ruft eine Nummer aus der Tastatur. Erst nachdem das Programm die Zahl gelesen hat, kann es zu testen, um zu sehen, ob die Anzahl der Kriterien Ausgang entspricht.

Wenn die Eingangszahl negativ ist, geht die Steuerung zu dem Unterbrechung, das Programm verursacht, die Schleife zu verlassen. Wenn die Eingangsnummer ist nicht negativ, überspringt die Steuerung über die Unterbrechung Befehl an den Ausdruck, der den neuen Wert in den Akkumulator summiert. Nachdem das Programm die Schleife beendet, gibt er den akkumulierten Wert und beendet dann.

Wenn auf eine Variable Durchführung einer Operation wiederholt in einer Schleife, stellen Sie sicher, dass die Variable vor dem Eintritt in die Schleife richtig initialisiert wird. In diesem Fall sind die Programm Nullen Akkumulator bevor die Schleife eintritt, wo nValue wird zugegeben.

Das Ergebnis eines Beispiels Lauf sieht wie folgt aus:

Dieses Programm fasst Werte aus dem userTerminate durch eine negative numberEnter nächste Nummer eingeben: 1Geben Sie die nächste Nummer: 2Geben Sie die nächste Nummer: 3Geben Sie die nächste Nummer: -1The insgesamt ist 6Drücken eingeben, um fortzufahren ...

die ähnliche fortsetzen Befehl wird weniger häufig verwendet. Wenn das Programm trifft der fortsetzen Befehl, bewegt er sich sofort wieder an die Spitze der Schleife. Der Rest der Anweisungen in der Schleife werden für die aktuelle Iteration ignoriert.

Das folgende Beispiel Schnipsel ignoriert negative Zahlen, dass der Benutzer möglicherweise Eingang. Nur 0 eine dieser Version endet (das vollständige Programm erscheint auf der Website als ContinueDemo):

while (true) // diese while () hat die gleiche Wirkung wie für (-) {// Eingabe eines valuecout lt; lt; "Input Wert:" - cin >> nValue - // wenn der Wert negativ ist ... if (nValue lt; 0) {// ... eine Fehlermeldung ausgeben ... cout lt; lt; "Negative Zahlen sind nicht erlaubt n" - // ... und an die Spitze des loopcontinue gehen zurück -} // ... Weiter Eingabe wie normal zu verarbeiten}

Menü