这里只有一个简短的问题,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“会不会上演。
发布于 2016-07-27 23:39:04
A100永远不会执行。
PERFORM是一个具有显式循环计数器的循环,这意味着它知道每次迭代的顺序。具体发生的情况是这样的:
WS-SUB设置为1WS-SUB > WS-SUB-2。WS-SUB is greater than WS-SUB-2,则中断循环,继续下一个statement.A100过程;最后,将WS-SUB递增1.
因为在开始时WS-SUB大于WS-SUB-2,所以执行语句会立即终止,因此永远不会执行A100。
很难理解你到底想要什么。这里有一些建议:
A100至少执行一次,则可以使用以下命令:IF WS-SUB-2 = FROM 0.将1移动到WS-SUB-2结束-If
A100 WS-SUB-2 + 1次数,则将UNTIL WS-SUB > WS-SUB-2更改为UNTIL WS-SUB > WS-SUB-2 + 1或将FROM 1更改为FROM 1发布于 2017-01-25 23:13:04
不,A100不会被执行。因为默认情况下PERFORM是WITH TEST BEFORE。因此,一旦执行检测到WS-SUB (1)大于WS-SUB2 (0),它就会停止。如果你想让A100执行一次,你可以使用PERFORM WITH TEST AFTER。在这种情况下,A100将运行一次。
https://stackoverflow.com/questions/36623899
复制相似问题