Skip to content

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。

stepvalueendvalue 的值在执行 For 语句后立即在内部存储,不能在循环内部更改。

迭代器必须是内置标量类型:只能使用 Static/Shared 变量和局部变量。

可以使用 As datatype 语法在 For 作用域内定义 iterator——它在 For...Next 作用域内创建并销毁。

endvalue 小于 startvalue,则必须指定负的 stepvalue,否则语句块不会执行。

Exit For 终止循环,在 Next 语句之后继续执行。

Continue For 跳过语句块的剩余部分,递增计数器并重新开始循环。

注意: 对于整数数据类型,无法循环到该类型的最大可能值,因为当递增后的变量 超过 endvalue 时循环才会中断。

ForNextStep 是可以在用户自定义类型中重载的运算符。

示例

示例 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: 展示 endvaluestepvalue 被缓存

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 参数不能用作计数器。

另请参阅

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系