<内存变量>:指定作为计数器的内存变量或数组元素。在执行FOR?ENDFOR语句之前,此内存变量或数组元素不一定存在。
<初始值> TO <终值>:<初始值>是计数器的初始值,而<终值>是计数器的终止值。
[STEP <步长>]:是计数器递增或递减的步长。如果<步长>是负值,则计数器递减;如果省略STEP子句,计数器每次递增1。
<语句序列>:指定要执行的VFP命令,它可以包含任意数量的命令。 [EXIT]:将控制权交给紧接在ENDFOR后面的命令。可以在FOR与ENDFOR之间的任何地方放置EXIT。
[LOOP]:将控制权直接交给FOR子句,不再执行LOOP与ENDFOR之间的语句。计数器正常递增或递减,就像执行到ENDFOR子句一样。可以在FOR与ENDFOR之间的任何地方放置LOOP。
说明:
可以用内存变量或数组元素作为计数器,指定FOR?ENDFOR循环中VFP命令的执行次数。在遇到ENDFOR或NEXT之前,始终执行FOR后面的VFP命令。执行过程中,每循环一次,计数器都会产生一次计数,计数增量由<步长>值控制,然后把计数器的值与<终值>进行比较,决定是否进行下一次循环。
【例5-9】求1到100中偶数的和 AA=0
FOR II=2 TO 100 STEP 2
AA=AA+II
ENDFOR ? AA
初始条件 终止条件 改变循环变量
step 步长0.5
For N=0.1 to 10 <语句组1> Loop <语句组2> Exit
endfor
clear k=0
for i=1 to 6 if i=5
loop
endif
k=k+1
endfor ?k retu clea s=1
for n=1 to 9 s=2*(s+1) endfo ?s retu
clea &&ASCII字母表 for i=2 to 255 ??i,chr(I) if I=0 ? endif endfor
(3)基于表的循环命令
格式:SCAN [<范围>] [FOR <条件>] [WHILE <条件>]
[<语句序列>]
[LOOP] [EXIT]
ENDSCAN
参数描述:
[<范围>]:指定对当前表中记录扫描的范围。只有在范围之内的记录才有可能扫描到。SCAN命令的默认范围为ALL。
[FOR <条件>]:只有条件表达式的计算结果为“真”的记录,才能对其执行命令。包含FOR子句可以筛选出不想扫描的记录。
[WHILE <条件>]:指定一个逻辑表达式作为执行命令的条件,只要逻辑表达式计算为“真”,就对记录执行命令,直到遇到使表达式不为“真”的记录为止。
[<语句序列>]:指定要执行的VFP命令集。
[LOOP]:把控制权直接交给SCAN子句。LOOP子句可以放在SCAN和ENDSCAN之间的任何地方。
[EXIT]:把控制权力从SCAN?ENDSCAN循环语句交给ENDSCAN下面的命令。EXIT子句可以放在SCAN和ENDSCAN之间的任何地方。
ENDSCAN:标志SCAN过程的结束。
说明:SCAN命令自动将记录指针移到下一条满足条件的记录,并执行相应的命令块。
【例5-10】逐条显示STUDENT表中男生的情况。 USE STUDENT
SCAN FOR 性别=”男”
DISP WAIT
ENDSCAN USE
use 基本表
acce \输入要查找的姓名\scan for <查询条件> disp <语句组1> [ Loop ]
<语句组2> [ Exit ] <语句组3> endscan clear use 基本表 *input \输入要查找的出生日期,分数\acce \请输入姓名 \scan for 姓名=xm
display fields 姓名,出生日期
endscan use
set talk on return
三种循环命令比较
Do while /enddo用于不确定的循环,可用于数值变量和记录查找; Scan /endscan 只用于记录查找;
For/endfor用于确定的循环,用于数值变量;
多重循环
For N=1 to 10 aa cc endfor CLEAR Text
For m=1 to 100 bb endfor
99[文本信息]
Endtext ?
for i=1 to 9
for j=1 to i
??str(j,1),\
endfor ?
endfor cancel
*阿基米德和国王下棋,阿基米德胜利,国王许诺奖励。阿基米德要求64格棋盘装满,第一格装1粒,第二格装2粒,
*第三格装4粒,第四格装8粒,。。。棋盘装满。现50000粒米重1千克,一火车厢装60吨,1秒发出一列火车,共要多少年运完?
clea s=0
for n=1 to 64
s=s+2^(n-1)
endfo ?s
nian=s/50000/1000/60/365/24/60/60 ?nian Retu
Clear &&换零钱 for x=1 to 100
for y=1 to 20
for z=1 to 10
if x+20*y+10*z=100
?x,y,z