【问题标题】:Nested Perform Loops in COBOL?COBOL 中的嵌套执行循环?
【发布时间】:2013-04-25 17:13:31
【问题描述】:

为什么我不能在 COBOL 中执行这个嵌套的执行循环?

如果我把 END-PERFORM.在任何一行都比我在退出程序之前的最后一行更早 - 它有效。但我需要程序每次都显示 INPUT C 值。在外部执行循环中。快把我逼疯了。

PROCEDURE DIVISION USING INPUTC CIPHER.
COMPUTE CIPHERMAX = CIPHER.
MULTIPLY -1 BY CIPHER
---> PERFORM VARYING CIPHER FROM 0 BY 1
UNTIL CIPHERMAX = CIPHER
    DISPLAY 'This is loop number: ' CIPHER
    INSPECT INPUTC CONVERTING
    "avcdefghijklmnopqrstuvwxyz" to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    COMPUTE CONVERTNUM = FUNCTION MOD (CIPHER, 26)
    INSPECT FUNCTION REVERSE(INPUTC) TALLYING LENGTHNUM FOR LEADING SPACES
    COMPUTE LENGTHNUM = LENGTH OF CIPHER - LENGTHNUM

 ---> PERFORM UNTIL SENTRY = LENGTHNUM

            IF ((FUNCTION ORD(INPUTC(SENTRY:1)) + CONVERTNUM) > (FUNCTION ORD('Z')))
             MOVE FUNCTION CHAR((FUNCTION ORD(INPUTC(SENTRY:1)) + CONVERTNUM) - 26) TO RECHAR
              ELSE
             MOVE FUNCTION CHAR(FUNCTION ORD(INPUTC(SENTRY:1)) + CONVERTNUM) TO RECHAR
             END-IF  
              IF (((FUNCTION ORD(INPUTC(SENTRY:1))) >= (FUNCTION ORD('A'))) AND 
             ((FUNCTION ORD(INPUTC(SENTRY:1))) <= (FUNCTION ORD('Z'))))
             IF ((FUNCTION ORD(INPUTC(SENTRY:1)) + CONVERTNUM) > (FUNCTION ORD('Z')))
                INSPECT INPUTC(SENTRY:1) REPLACING ALL INPUTC(SENTRY:1) BY RECHAR
             ELSE
                INSPECT INPUTC(SENTRY:1) REPLACING ALL INPUTC(SENTRY:1) BY RECHAR
             END-IF
          ELSE
                INSPECT INPUTC(SENTRY:1) REPLACING ALL INPUTC(SENTRY:1) BY INPUTC(SENTRY:1)
          END-IF

          COMPUTE SENTRY = SENTRY + 1
        --->  END-PERFORM
    DISPLAY INPUTC.
    COMPUTE LOOPI = LOOPI + 1
    --->END-PERFORM.
EXIT PROGRAM.
END PROGRAM SOLVE.

【问题讨论】:

  • 您有一个 IF,其 ELSE 具有相同的代码。您还有一个带有 INSPECT 的 ELSE,它自己替换了一个字符。为什么要使用 INSPECT ... REPLACING 处理单字节字段?为什么不只是移动? LOOPI 有什么用?为什么不 ADD 1 TO SENTRY 而不是 COMPUTE?你乘-1,减...从零会更快。但是随后您立即在 PERFORM 中将 CIPHER 设置为 0,那么为什么要否定呢?我怀疑还有更多,但你用 FUNCTION on FUNCTION 让整个事情变得难以理解。
  • 另外,在avcdefghijklmnopqrstuvwxyz 中,您的意思可能是abc...

标签: cobol gnucobol cobol85


【解决方案1】:

DISPLAY INPUTC. 之后的那个讨厌的范围终止期正在终止嵌套的 PERFORM 语句的范围。摆脱这个时期,一切都应该正常。

在将程序编码为 COBOL-85 标准时,您应该在程序部使用的唯一句点是终止节和段落标题所需的句点,以及终止当前段落、节或程序所需的句点。

【讨论】:

    【解决方案2】:

    显示 INPUTC 语句中有句点。删除期间,你应该没问题。 Period 总是结束一个语句。

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多