嵌套执行需要,不需要最终执行

Joh*_*ame 3 cobol

有了这段代码,我明白了

16: Perform stmnt not terminated by end-perform

33: syntax error, unexpected end-perform
Run Code Online (Sandbox Code Playgroud)

为什么说我需要最终表演而且也不需要它?

   identification division.
   program-id.  xxx.     
  * will accept and display a num until 0 is called then
  * asks to go again


   data division.
   file section.

   working-storage section.     
   01  num                 pic 9(4).
   01  hold                pic 9(4).
   01  another             pic x.
   procedure division.
     perform until another = 'N'                 (line 16)
        Display "Another Session (Y/N)? "
              with no advancing
        if another = 'Y'
        Display "Enter a 4-digit unsigned number (0 to stop): "
             with no advancing
        accept num
        move num to hold
        perform until num = 0
        Display "Enter a 4-digit unsigned number (0 to stop): "
             with no advancing
        accept num
          if num <> 0
       move num to hold
        end-perform.
        display space
        Display "The last number entered: "hold
     End-perform.                            (Line 33)

     stop run.
Run Code Online (Sandbox Code Playgroud)

Bil*_*ger 5

   end-perform.
    display space
    Display "The last number entered: "hold
 End-perform.                            (Line 33)
Run Code Online (Sandbox Code Playgroud)

这是杀手的全停/周期(第30行).

虽然自1985年以来标准COBOL在全停/周期方面更加放松,但是单一的COBOL将使所有当前的范围尖叫停止.你可以将50级深度嵌套,一次完整停止/期间将一举结束.

我的建议是在PROCEDURE DIVISION中使用绝对最小值的句号.

即:一个终止PROCEDURE DIVISION标题; 一个终止每个段落/ SECTION标签; 一个终止paragrpah/SECTION; 一个终止程序(对于没有段落/ SECTIONS的程序).此外,如果您有PROCEDURE DIVISION COPY或REPLACE语句,则需要使用句号/句号来终止这些语句.

除了终止标签之外,我将每个句号/句点放在自己的一行上,从不附加到任何代码.然后我可以移动代码并插入代码,而不必担心是否需要添加/删除一个句号/句号.

至于为什么你需要END-PERFORM,它是一个"内联PERFORM".从语法上讲,内联PERFORM需要END-PERFORM,但是在END-PERFORM定位之前,使用全停止/周期导致PERFORM范围终止,因此第16行出错.随后END-PERFORM未连接到找到了PERFORM,因此第33行的错误.

在您的问题中输入错误消息时,您必须完全按照所看到的那样包含错误消息.复制/粘贴,请不要重新尝试.还包括任何消息编号.