Alternative+FOR+NEXT+behaviour

//by Richard Russell, July 2007//

Although the **FOR**...**NEXT** loop is fundamental to all versions of BASIC, dialects differ in its detailed implementation. In **BBC BASIC** FOR...NEXT loops have the following properties:


 * The body of the loop is always executed at least once, irrespective of the values specified in the FOR statement.
 * On exit from the loop the loop variable has a value //greater than// (for a positive STEP) the TO value specified in the FOR statement, i.e. one more STEP has taken place.

The following examples illustrate this behaviour:

code format="bb4w" FOR i% = 1 TO 0 PRINT i%     NEXT i%

FOR i% = 1 TO 10 NEXT i%     PRINT i% code The first loop prints **1**, even though the 'finish' value is less than the 'start' value. The second loop prints **11**, which is one more than the 'finish' value.

On occasion you may wish to emulate the behaviour of a different BASIC dialect, for example when porting a program to BBC BASIC. One convenient way of doing that is to use the [|EXIT FOR] statement available in //BBC BASIC for Windows// version 5.60a or later.

Some BASIC dialects //do not execute the FOR loop at all// if the initial conditions aren't met, i.e. the 'finish' value is less than the 'start' value (with a positive STEP). To emulate that behaviour use code similar to the following:

code format="bb4w" FOR loopvar = start TO finish IF loopvar > finish THEN EXIT FOR REM Body of loop here NEXT loopvar code Some BASIC dialects exit the loop //with the loop variable equal to the 'finish' value//. To emulate that behaviour use code similar to the following:

code format="bb4w" FOR loopvar = start TO finish REM Body of loop here IF loopvar >= finish THEN EXIT FOR NEXT loopvar code Of course you can combine both behaviours if you wish:

code format="bb4w" FOR loopvar = start TO finish IF loopvar > finish THEN EXIT FOR REM Body of loop here IF loopvar >= finish THEN EXIT FOR NEXT loopvar code In all cases if the STEP is negative you need to reverse the comparisons:

code format="bb4w" FOR loopvar = start TO finish STEP -delta IF loopvar < finish THEN EXIT FOR REM Body of loop here IF loopvar <= finish THEN EXIT FOR NEXT loopvar code