1

当我调用另一个程序时,我需要问一下我的菜单程序有什么问题

通过点击 1 或 2,当程序调用时,我无法返回我的菜单程序,

你能帮我吗?当我按 Esc 键时,我怎样才能回到我的菜单,或者

我的通话记录是错误的。

这是我的菜单程序的代码。

LINKAGE SECTION.
   01 MY-PROG1 PIC X.
   01 MY-PROG2 PIC X.

......
......
......

MAIN.

       DISPLAY MENU-HEADER ERROR-MESSAGE.
       PERFORM ENTRY-MENU UNTIL CHOICE = 3.     
       STOP RUN.

   ENTRY-MENU.
       ACCEPT MENU-SELECT.
       PERFORM INPUT-CHOICE UNTIL CHOICE = 3.
       STOP RUN.

   INPUT-CHOICE.
       IF CHOICE = 1
         CALL  'MY-PROGRAM1' USING MY-PROG1 
       ELSE IF CHOICE =2
         CALL 'MY-PROGRAM2' USING MY-PROG2
       ELSE 
          MOVE "INVALID INPUT....." TO ERRMSG
          DISPLAY ERROR-MESSAGE.

这是 MY-PROGRAM1.COB 这是我按下 Esc 键时如何回调菜单程序

LINKAGE SECTION.
   01   MY-PROG1 PIC X.
   01   MY-MENU  PIC X.

......
......
......


MAIN.

 .......
 .......
 STOP RUN.

ENTER-BIRTHDATE.

  ACCEPT...
  .......

  IF ESC-KEY
     DISPLAY CLEAR-SCREEN
     CALL 'MENU'

  ELSE IF F10
    .....
    .....       
4

1 回答 1

4

您应该将STOP RUN被调用程序中的语句替换为GOBACK.

这是使用STOP RUNand的一般规则GOBACK

GOBACK 语句标记被调用程序的逻辑结束。

一般规则 如果在调用运行时元素控制下的程序中执行 GOBACK 语句,则目标程序的运行就像执行与 GOBACK 语句具有相同子句的 EXIT PROGRAM 语句一样。请参阅主题 EXIT 语句。如果在不受调用运行时元素控制的程序中执行不带 ADDRESS OF 子句的 GOBACK 语句,则目标程序就像执行与 GOBACK 语句具有相同子句的 STOP RUN 语句一样运行。如果在不受调用运行时元素控制的程序中执行带有 ADDRESS OF 子句的 GOBACK 语句,则目标程序就像执行 STOP RUN 语句一样运行,只是在系统区域中设置了任意返回值。GOBACK 语句可能会产生比等效的 EXIT PROGRAM 和 STOP RUN 语句更紧凑的代码。在执行指定了 GLOBAL 短语的声明性过程时,不得执行 GOBACK 语句,除非在执行该声明性过程时调用的程序中。如果在函数中执行 GOBACK 语句,则该函数将如同执行 EXIT FUNCTION 语句一样运行。如果在方法中执行 GOBACK 语句,则该方法就像执行 EXIT METHOD 语句一样运行。如果在迭代器中执行 GOBACK 语句,则迭代器就像执行 EXIT ITERATOR 语句一样运行。在执行指定了 GLOBAL 短语的声明性过程时,不得执行 GOBACK 语句,除非在执行该声明性过程时调用的程序中。如果在函数中执行 GOBACK 语句,则该函数将如同执行 EXIT FUNCTION 语句一样运行。如果在方法中执行 GOBACK 语句,则该方法就像执行 EXIT METHOD 语句一样运行。如果在迭代器中执行 GOBACK 语句,则迭代器就像执行 EXIT ITERATOR 语句一样运行。在执行指定了 GLOBAL 短语的声明性过程时,不得执行 GOBACK 语句,除非在执行该声明性过程时调用的程序中。如果在函数中执行 GOBACK 语句,则该函数将如同执行 EXIT FUNCTION 语句一样运行。如果在方法中执行 GOBACK 语句,则该方法就像执行 EXIT METHOD 语句一样运行。如果在迭代器中执行 GOBACK 语句,则迭代器就像执行 EXIT ITERATOR 语句一样运行。

停止运行。这取决于您的系统。大多数编译器上的 STOP RUN 会终止程序,如果它被另一个 cobol 程序调用,则整个过程都会终止。

在此链接的末尾,您可以找到一个很好的模式来表示所有这些关系。

编辑:(来自旧的 Microsoft Cobol 文档)

EXIT PROGRAM STATEMENT : EXIT PROGRAM 语句出现在被调用的子程序中,导致控制权返回到调用程序中 CALL 之后的下一个可执行语句。该声明必须是一个段落本身。

于 2012-05-05T15:16:26.580 回答