2016-11-07 10 views
-2

I-Code las und stieß auf eine while-Schleife wie folgt aufgebaut:C-Programmierung, während Schleife

while(q--) 

Ich verstehe, dass dies ein Beitrag Dekrementoperator ist, aber ich verstehe nicht die Bedingung, dass sein wird in der while-Schleife

dank für Ihre Zeit, Connor

Antwort

6

A while Schleife prüft, ob die Bedingung erfüllt ist, getestet.

Ein Ausdruck, der zu 0 auswertet, wird als falsch betrachtet, während alle Ausdrücke, die nicht Null sind, als wahr betrachtet werden.

Aus Abschnitt 6.8.5 des C Standard:

Eine Iteration Anweisung bewirkt, dass eine Anweisung der Schleifenkörper ausgeführt werden genannt wiederholt, bis die Expression kontrollierende auf 0 gleich vergleicht. Die Wiederholung erfolgt unabhängig davon, ob der Schleifenkörper ist von der Wiederholungsanweisung eingegeben oder durch einen Sprung

so dass diese Schleifentests, wenn q nicht Null ist. Sobald q auf 0 dekrementiert ist, wird die Schleife beendet.

+0

Sehr hilfreich, danke. –

+1

@ConnorShorten Ich bin froh, dass ich helfen konnte. Fühlen Sie sich frei, diese Antwort zu akzeptieren (http://stackoverflow.com/help/accepted-answer), wenn Sie es nützlich fanden. – dbush

1

In C wird ein "TRUE" durch NON-Zero-Value dargestellt. Also läuft die Schleife, bis "q" "0" erreicht.

Dies ist Lazy-Bad-Programmierung. Es braucht nicht viel Aufwand, um den Code klar und präzise zu machen.

while ((q -)! = 0) Wäre besser geeignet. oder while (q! = 0) { q-; // ....... }

+0

Dies ist auch Idiomatik C, von einigen für seine Prägnanz bevorzugt. Es ist sicherlich wichtig, gängige Redewendungen zu verstehen. Aber ich würde nicht sagen, dass diese Konstruktion notwendigerweise faul oder schlecht ist. –

0

Grundsätzlich ist der Ausdruck while(q--) gleich

while(q == true) 
{ 
    q--; 
} 

seit while, was zwischen den Klammern zu true und zugleich in vergleicht ist kann Operationen ausführen, wie for loop. Beachten Sie, dass der Wert 1 true bedeutet und der Wert 0 false bedeutet. Sobald Sie q= 0 haben, wird die Bedingung false zurückgegeben, wodurch die Schleife gestoppt wird.