Commodore‎ > ‎BASIC‎ > ‎Keywords‎ > ‎


Keyword Abbreviation Token (hex) Version(s) Classification
WHILE W{Shift+H} FD 3.5, 7.0 Presposition

DO [ { UNTIL | WHILE startTest ] [ : statement ] ...
[ statement : ] ... [ EXIT ] [ : statement ] ...
[ statement : ] ... LOOP [ { UNTIL | WHILE } endTest ] [ : otherCode ] ...
Parameters Type Legal Value(s) Default Value Note(s)
startTest Float    all   Zero is false, any other number is true
endTest Float all Zero is false, any other number is true
Command or
all Inside (during) the loop
Command or
all   Outside (after) the loop
Program flow control.  Evaluate a condition and verify true before starting/repeating a block of statement(s).

The entire DO...LOOP construct may be on a single line, or span any number of lines (not only 3 lines like Syntax shows).  The statement(s) will be executed an arbitrary number of times; depending on the results of startTest and/or endTest (if either).  The loop will run forever (or until an EXIT is executed) if both startTest and endTest are omitted.
See the entry for DO for more details; this page concentrates on WHILE itself.
The WHILE clause will check its condition (the startTest following DO or the endTest following LOOP) and if it is true (non-zero) another (or first) pass of the statement(s) will be made.  If the condition is false (the test "fails") then DO is removed from the BASIC stack and the otherCode is executed (the code after LOOP, if any).  In the case of startTest (i.e., following DO), a matching LOOP must be found if the test "fails" or LOOP NOT FOUND ERROR occurs.
Unlike Visual BASIC or C, a WHILE (or UNTIL) test can be made at both the DO (start) and LOOP (end) parts of a pass in CBM BASIC.
One problem exists which is similar to that of FOR/NEXT.  The problem is that using LOOP in a conditional statement (IF/THEN/ELSE) may foul things up.  This happens when EXIT occurs before the conditional LOOP or the startTest "fails".  A solution is similar to that of a conditional NEXT, which is to follow the conditional LOOP with GOTO to get to the real/unconditional end of the loop.
Whenever WHILE appears, its associated condition (startTest or endTest) is required; if missing, a SYNTAX ERROR occurs and if the condition is not a numeric expression a TYPE MISMATCH ERROR is generated.

10 X = 0: DO WHILE X<3 : PRINT X;
20 : Y = 0: DO: PRINT Y
30 : Y = Y+1 : LOOP WHILE Y<2
30 X = X+1 : LOOP
 0  0
 0  1
 1  0
 1  1
 2  0
 2  1

  Compare With  
  Contrast With  
  See Also  

© H2Obsession, 2014