5.5 循环结构
for 循环

数据在流入流出循环结构时,除了可以通过隧道,也可以通过移位寄存器或者反馈节点。
使用了索引隧道的 for 循环结构,可以不用提供循环次数,即不必输入 N 值,循环迭代次数由输入数组的长度决定。迭代次数即数组长度。这样,循环结构恰好能够处理完输入数组的每一个元素。

隧道(隧道负责在循环结构内外传递数据)
循环结构的隧道与其它结构中的隧道是类似的。根据数据进出结构的方向,它可以分为输入隧道和输出隧道:输入隧道的输入端在结构外侧,输出端在结构内侧;输出隧道的输入端在结构内侧,输出端在结构外侧。
"禁用索引" 或 "启用索引",以禁用或启用隧道的索引功能
使用了索引隧道的 for 循环结构,可以不用提供循环次数,即不必输入 N 值;循环迭代次数由输入数组的长度决定。

"循环次数" 和 "数组长度" 的值是相同的,"元素" 和 "元素 2" 的值也是相同的。
处理二维数组




for 循环的应用实例:
程序 1. 编写一个程序,程序列出某一路径下的所有 VI,再把这些 VI 的文件名在程序前面板上一一显示出来。同时前面板上有一进度条,可以表明已显示了总数的多少。在需要给程序添加进度条时,可以参考本例的思路。
递归文件列表" 选板,它用于输出指定文件夹中的内容。拆分路径函数位于 "编程 -> 文件 I/O-> 拆分路径",用于输出文件或文件夹名。


程序 2. 判断图 3.35 程序中 "输出整数" 的值是多少?




"数组" 为空数组,则循环一次也不会迭代,与 "输出整数" 相连的循环结构输出隧道得不到任何数据,只能返回一个默认值。
移位寄存器
当循环的不同迭代间需要有数据传递时,需要使用另一种机制:移位寄存器。
凡是循环内需要使用变量的地方,首先应考虑使用移位寄存器。
一对移位寄存器总是包含左右两部分,但这两部分中的数据是同一份;而隧道则有输入隧道和输出隧道之分,某个输入隧道是与其它输出隧道毫无关系的独立节点。



输出值" 取决于运行这个 VI 的次数。每次运行该 VI,"输出值" 都会发生变化。这就是必须给移位寄存器赋初始值的原因。


移位寄存器除了在迭代间传递数据之外,还附带有其他一些功能。其中最主要有两点:一是帮助程序内存优化;二是用于功能全局变量中。我们将在后续的相关章节中再讨论这两点应用。
反馈节点
单纯为了让下一次迭代使用上次迭代的数据,也可以使用如图 3.41 所示的反馈节点。

反馈节点的参数设置
单独使用反馈节点是无法判断运行结果的
既不知道反馈节点的初始状态,也不知道它运行了多少次,也就无法判断其运行结果。只有给定了这两个条件,才能推算出程序的运行结果


反馈节点有个启用输入端,右键点击反馈节点,选择 "显示启用接线端" 可以显示出这个输入端。
输入为真时,反馈节点正常工作;输入为假时,反馈节点在这一循环并不工作,而是输出上一次执行或循环的数据。


输出5
移位寄存器除了可以返回上一次迭代的数据,还可以返回上 n 次的迭代数据。反馈节点也有类似功能(并不完全相同)。右键点击反馈节点,打开它的属性配置对话框,在配置中可以选择延时的次数。比如设置延迟 3 次,那么反馈节点每 3 次迭代才把数据反馈一次。比如图 3.48 的这个程序,result 控件在程序的 5 次迭代中分别返回值 1、1、1、2、2......,其运行结果是 2。


3. 在子 VI 中直接使用反馈节点


结束条件
类似于 C 语言中跳出循环的 break 语句。

while 循环结构
与文本语言中的 do... while... 循环语句类似。如果程序的逻辑是先执行循环,再判断是否停止循环,则应当首先考虑使用 while 循环。
while 循环至少会执行迭代一次

在可以确定循环次数的情形下,更适合使用 for 循环。


练习
- 编写一个 VI,利用循环结构计算从 33 到 62 之间所有整数的和。
![]()


浙公网安备 33010602011771号