FOR...NEXT
来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgFornext 最后更新: 2021-09-28
用于循环的控制流语句。
语法
For iterator [As datatype] = startvalue To endvalue [Step stepvalue]
[statement block]
Next [iterator]参数
- iterator — 用于从初始值迭代到结束值的变量标识符。
- datatype — 若指定,
iterator将自动以datatype类型声明。 - startvalue — 表示迭代器起始值的表达式。
- endvalue — 用于与迭代器当前值进行比较的表达式。
- stepvalue — 每次迭代后加到迭代器上的表达式。
说明
For...Next 循环将 iterator 初始化为 startvalue,然后执行 statement block,每次将 iterator 递增 stepvalue,直到其超过 endvalue。若未指定 stepvalue,则默认为 1。
stepvalue 和 endvalue 的值在执行 For 语句后立即在内部存储,不能在循环内部更改。
迭代器必须是内置标量类型:只能使用 Static/Shared 变量和局部变量。
可以使用 As datatype 语法在 For 作用域内定义 iterator——它在 For...Next 作用域内创建并销毁。
若 endvalue 小于 startvalue,则必须指定负的 stepvalue,否则语句块不会执行。
Exit For: 终止循环,在 Next 语句之后继续执行。
Continue For: 跳过语句块的剩余部分,递增计数器并重新开始循环。
注意: 对于整数数据类型,无法循环到该类型的最大可能值,因为当递增后的变量 超过 endvalue 时循环才会中断。
For、Next 和 Step 是可以在用户自定义类型中重载的运算符。
示例
示例 1:
vb
Print "counting from 3 to 0, with a step of -0.5"
For i As Single = 3 To 0 Step -0.5
Print "i is " & i
Next i示例 2: 展示 endvalue 和 stepvalue 被缓存
vb
Dim As Integer i, j, k
j = 9: k = 1
For i = 0 To j Step k
j = 0: k = 0 '' Changing j and k has no effect on the current loop.
Print i;
Next i
Print示例 3: UByte 的无限循环风险
vb
For ub As UByte = 240 To 255 '' Infinite loop: 255+1=256 can never be reached by UByte
Print ub
If Inkey <> "" Then Exit For
Sleep 10
Next ub方言差异
- 在
-lang fb和-lang deprecated中,在For..Next块内声明的变量仅在该块内可见。 - 在
-lang qb和-lang fblite中,变量具有过程范围的作用域。
与 QB 的区别
ByRef参数不能用作计数器。