# for...next statement

The for...next statement is an iterative,
incremental loop statement used to repeat a sequence of statements
for a specific number of occurrences.

## Syntax

```
for var = num.exp1 to num.exp2{step num.exp3} {[while|until] logical.exp}
statement{s}
.
.
next var
```

## Description

A for...next loop executes a set of statements for successive values of a variable
until a limiting value is encountered. Such values are specified by
establishing an initial value (*num.exp1*), a limiting
value (*num.exp2*), and an optional increment value
(*num.exp3*) to be added at the end of each pass
through the loop.

If the loop-ending condition is not met, the
loop variable is incremented by 1 or by the value of the step expression and program control transfers back to
the beginning of the loop. This looping continues until the ending
condition is met or the loop is explicitly exited with an exit or goto statement.

## for...next...until

for...next...until is a conditional incremental loop statement. It executes when the
expression following the until clause evaluates
to false. The until clause must appear on the same
line as the for...next statement.

**General Form**
```
for var= num.expto num.exp{step num.exp}...
...until logical.exp
statement{s}
.
.
next var
```

## for...next...while

for...next...while is also a conditional incremental loop statement. It executes when
the expression following the while evaluates to
true. Like the until clause, the while statement must appear on the same line as the for ... next statement.

**General Form**
```
for var= num.expto num.exp{step num.exp}...
...while logical.exp
statement{s}
.
.
next var
```
The expression in the optional while or until clause is a logical expression. If the while expression is true, the for...next loop continues. If the expression is false, program control passes
to the statement immediately following the accompanying next statement.

If the until expression is true,
program control passes to the statement immediately following the
accompanying next statement. If the expression
is false, the for...next loop continues. When the
loop is exited, the loop variable retains its last value. The variable
in the next statement must be the same as the variable
in the for statement.

until and while cannot be used in the same for...next loop.

Note: String math is not supported
by the for statement. This limits the range to
14 digits both before and after the decimal point.

## Example(s)

This example displays every value
in array element 13.

```
number.values = dcount(array(13),char(253))
for i = 1 to number.values
crt i "l#4" : array(13)<1,i>
next i
```
This example prints an incrementing counter based on the
number of values in array element 13. The loop terminates as soon
as the last value is tested (`number.values`) or the
first null value is found.

```
for i = 100 to 1 step -1
crt i "l#4" :
next i
This is a decrementing counter beginning at 100 and ending at 1.
number.values = dcount(array(13),char(253))
for i = 1 to number.values until array(13)<1,i>=’’
print i
next i
```
All of the above for...next constructs
can be constructed using the loop...repeat constructs.

```
for i = 1 to 99 until array(i) = ""
crt array(i)
next i
```
There are 99 elements in the dimensioned array `array`. This example prints all elements until a null value
is found.

```
t=time()
timeout=10
for try = 1 to 5 until ((time() - t)>timeout or system(14))
sleep 2
next try
```
This for...next loop has a maximum
of 5 iterations. The loop terminates when the elapsed time in seconds
exceeds 10, or there are characters in the type-ahead buffer.

```
for i = 1 to 99 while array(i) # ""
crt array(i)
next i
```
This loop terminates when the 99th entry displays or the
first null entry is encountered.

```
for i = 1 to 99 while not(array(i) = "")
crt array(i)
next i
```

## See also

- [Boolean evaluation](https://d3codex.com/pickbasic-flashbasic/boolean-evaluation/)
- [continue statement](https://d3codex.com/pickbasic-flashbasic/continue-statement/)
- [exit statement](https://d3codex.com/pickbasic-flashbasic/exit-statement/)
- [for...next statement](https://d3codex.com/pickbasic-flashbasic/for-next-statement/)
- [loop statement](https://d3codex.com/pickbasic-flashbasic/loop-statement/)
- [next statement](https://d3codex.com/pickbasic-flashbasic/next-statement/)
- [Statements and functions](https://d3codex.com/pickbasic-flashbasic/statements-and-functions/)
- [until clause](https://d3codex.com/pickbasic-flashbasic/until-clause/)
- [while clause](https://d3codex.com/pickbasic-flashbasic/while-clause/)

---
Source: https://d3codex.com/pickbasic-flashbasic/for-next-statement/ - part of the D3Codex reference.
