这里只是一个简单的问题,COBOL将如何处理以下声明?
MOVE ZERO TO WS-SUB-2.
然后是:
PERFORM A100
VARYING WS-SUB FROM 1 BY 1
UNTIL WS-SUB > WS-SUB-2.
原因是我的表演有变化,直到2个变量被比较,但是" WS-SUB-2"可以为零。我只需要知道" A100"将永远执行。
答案 0 :(得分:0)
A100
永远不会被执行。
PERFORM
是一个带有显式循环计数器的循环,这意味着它知道每次迭代的顺序。究竟发生了什么,是这样的:
WS-SUB
设置为1 WS-SUB > WS-SUB-2
。
WS-SUB is greater than WS-SUB-2
,则跳出循环并继续下一个语句。A100
程序;并且最后WS-SUB
增加1。因为在开始时WS-SUB
大于WS-SUB-2
,所以perform语句会立即终止,因此永远不会执行A100
。
有点难以理解你想要的是什么。这里有一些建议:
如果您希望A100
至少执行一次,可以使用此功能:
IF WS-SUB-2 = ZERO
MOVE 1 TO WS-SUB-2
END-IF
如果您要执行A100
WS-SUB-2 + 1
次,请将UNTIL WS-SUB > WS-SUB-2
更改为UNTIL WS-SUB > WS-SUB-2 + 1
或将FROM 1
更改为FROM 0
答案 1 :(得分:0)
不,A100不会被执行。因为PERFORM
默认为WITH TEST BEFORE
。因此,一旦PERFORM检测到WS-SUB(1)大于WS-SUB2(0),它就会停止。如果您希望A100执行一次,则可以使用PERFORM WITH TEST AFTER
。在这种情况下,A100将运行一次。