我想找出为什么执行没有被执行?
在我看来,所有变量都按照它们应该的方式设置,但循环仍然没有被执行。
问题:永远不会输入循环,为什么?
代码:
C-MATCH.
MOVE 0 TO SUB.
DISPLAY 'BEFORE PERFORM'.
DISPLAY 'TABLECOUNTER ' TABLECOUNTER.
DISPLAY 'SUB ' SUB.
PERFORM VARYING SUB FROM 0 BY 1 UNTIL SUB < TABLECOUNTER
DISPLAY 'BEFORE IF STATEMENT'
IF PROVM(SUB) <= P-PROVIDER AND
P-PROVIDER <= PTHRU(SUB) THEN
DISPLAY 'FOUND'
ADD 1 TO T-REC-FOUND
END-IF
END-PERFORM.
X-C-MATCH. EXIT.
答案 0 :(得分:3)
这里要指出的一些事情。
引用表元素时,第一个COBOL下标以1开头。如果你被使用 对于Java和C等语言,下标通常以0开头.0的下标超出范围且可以 如果你没有开启边界检查,会导致各种奇怪的行为。
接下来,您的循环终止条件是错误的。您可能习惯DO WHILE some-condition-is-true
。在
COBOL我们一般PERFORM UNTIL some-condition-is-true
,意思是当条件停止时执行
变得真实。所以看看:
PERFORM VARYING SUB FROM 0 BY 1 UNTIL SUB < TABLECOUNTER
DISPLAY 'BEFORE IF STATEMENT'
IF PROVM(SUB) <= P-PROVIDER AND
P-PROVIDER <= PTHRU(SUB) THEN
DISPLAY 'FOUND'
ADD 1 TO T-REC-FOUND
END-IF
END-PERFORM.
由于SUB
初始化为零,并且我假设TABLECOUNTER
为1或更大,因此条件为真,所以
循环体永远不会被执行。