Main Content

while

Zu wiederholende while-Schleife, wenn eine Bedingung wahr ist

Syntax

while expression
    statements
end

Beschreibung

Beispiel

while expression, statements, end wertet einen Ausdruck aus und wiederholt die Ausführung einer Gruppe von Anweisungen in einer Schleife, solange der Ausdruck wahr ist. Ein Ausdruck ist wahr, wenn das Ergebnis nicht leer ist und nur Elemente ungleich null (logisch oder reell numerisch) enthält. Anderenfalls ist der Ausdruck falsch.

Beispiele

alle reduzieren

Verwenden Sie eine while-Schleife, um factorial(10) zu berechnen.

n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end
disp(['n! = ' num2str(f)])
n! = 3628800

Ermitteln Sie die Anzahl der Codezeilen in der Datei magic.m. Überspringen Sie leere Zeilen und Kommentare mithilfe einer continue-Anweisung. Mit continue werden die verbleibenden Befehle in der while-Schleife übersprungen und es wird mit der nächsten Iteration begonnen.

fid = fopen('magic.m','r');
count = 0;
while ~feof(fid)
    line = fgetl(fid);
    if isempty(line) || strncmp(line,'%',1) || ~ischar(line)
        continue
    end
    count = count + 1;
end
count
count = 37
fclose(fid);

Summieren Sie eine Sequenz von Zufallszahlen, bis die nächste Zufallszahl größer als eine Obergrenze ist. Verlassen Sie anschließend die Schleife mit einer break-Anweisung.

limit = 0.8;
s = 0;

while 1
    tmp = rand;
    if tmp > limit
        break
    end
    s = s + tmp;
end

Mehr über

alle reduzieren

Ausdruck

Ein Ausdruck kann relationale Operatoren (z. B. < oder ==) und logische Operatoren (z. B. &&, || oder ~) umfassen. Verwenden Sie die logischen Operatoren and und or, um zusammengesetzte Ausdrücke zu erstellen. MATLAB® wertet zusammengesetzte Ausdrücke von links nach rechts aus und beachtet dabei die Rangfolgeregeln.

Innerhalb des bedingten Ausdrucks eines while...end-Blocks verhalten sich die logischen Operatoren & und | wie Kurzschlussoperatoren. Dieses Verhalten ist identisch mit dem Verhalten von && bzw. ||. Da && und || in bedingten Ausdrücken und Anweisungen konsequent kurzgeschlossen werden, ist es empfehlenswert, innerhalb des Ausdrucks && und || anstelle von & und | zu verwenden. Beispiel:

x = 42;
while exist('myfunction.m','file') && (myfunction(x) >= pi)
    disp('Expressions are true')
    break
end

Der erste Teil des Ausdrucks wird als falsch ausgewertet. Daher muss MATLAB den zweiten Teil des Ausdrucks nicht auswerten, was zu einem undefinierten Funktionsfehler führen würde.

Tipps

  • Sie haben versehentlich eine Endlosschleife erstellt (d. h. eine Schleife, die niemals selbstständig endet). Stoppen Sie die Ausführung der Schleife, indem Sie die Tastenkombination Strg+C verwenden.

  • Wenn der bedingte Ausdruck als Matrix ausgewertet wird, wertet MATLAB die Anweisungen nur aus, wenn alle Elemente in der Matrix wahr (ungleich null) sind. Zum Ausführen von Anweisungen, wenn ein beliebiges Element wahr ist, umschließen Sie den Ausdruck mit der Funktion any.

  • Um die Schleife programmgesteuert zu verlassen, verwenden Sie eine break-Anweisung. Sollen die übrigen Befehle in der Schleife übersprungen und die nächste Iteration begonnen werden, verwenden Sie eine continue-Anweisung.

  • Beim Verschachteln mehrerer while-Anweisungen, erfordert jede while-Anweisung ein end-Schlüsselwort.

  • Die while-Schleife in MATLAB ähnelt einer do...while-Schleife in anderen Programmiersprachen, z. B. C und C++. Allerdings wertet while den bedingten Ausdruck zu Beginn der Schleife und nicht am Ende der Schleife aus.

    do  % Not valid MATLAB syntax
        statements
    while expression
    

    Um das Verhalten einer do...while-Schleife nachzuahmen, legen Sie die erste Bedingung von while auf true fest und positionieren Sie den bedingten Ausdruck innerhalb der Schleife. Implementieren Sie beispielsweise die do...while-Schleife oben mithilfe einer while-Schleife in MATLAB.

    while true
        statements
        if ~expression
            break
        end
    end
    

Erweiterte Fähigkeiten

C/C++ Codegenerierung
Generieren Sie C und C++ Code mit MATLAB® Coder™.

Versionsverlauf

Eingeführt vor R2006a