为什么我的PERFORM循环不起作用?

时间:2014-03-07 19:53:59

标签: cobol

我想找出为什么执行没有被执行?

在我看来,所有变量都按照它们应该的方式设置,但循环仍然没有被执行。

问题:永远不会输入循环,为什么?

代码:

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. 

1 个答案:

答案 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或更大,因此条件为真,所以 循环体永远不会被执行。