执行变化直到sub等于0

时间:2016-04-14 12:59:54

标签: cobol

这里只是一个简单的问题,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"将永远执行。

2 个答案:

答案 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将运行一次。