COBOL中的嵌套执行循环?

COBOL中的嵌套执行循环?,cobol,gnucobol,cobol85,Cobol,Gnucobol,Cobol85,为什么我不能在COBOL中执行这个嵌套的执行循环 如果我把它放在最后执行。在任何一行中,都比我在退出程序之前的最后一行要快——它可以工作。但我需要程序每次显示输入的C值。在外部执行循环中。我快发疯了 PROCEDURE DIVISION USING INPUTC CIPHER. COMPUTE CIPHERMAX = CIPHER. MULTIPLY -1 BY CIPHER ---> PERFORM VARYING CIPHER FROM 0 BY 1 UNTIL CIPHERMAX =

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

如果我把它放在最后执行。在任何一行中,都比我在退出程序之前的最后一行要快——它可以工作。但我需要程序每次显示输入的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.
使用INPUTC密码的过程划分。
计算密码=密码。
用密码乘以-1
--->执行从0到1的变化密码
直到CIPHERMAX=密码
显示“这是循环编号:”密码
检查输入UTC转换
“avcdefghijklmnopqrstuvwxyz”至“abcdefghijklmnopqrstuvxyz”
COMPUTE CONVERTNUM=函数MOD(密码,26)
检查前导空格的功能反转(INPUTC)计数长度
COMPUTE LENGTHNUM=密码长度-LENGTHNUM
--->执行直到哨兵=长度数值
IF((函数ORD(inputt(哨兵:1))+CONVERTNUM)>(函数ORD('Z'))
将函数CHAR((函数ORD(inputct(哨兵:1))+CONVERTNUM)-26)移动到RECHAR
其他的
将函数CHAR(函数ORD(inputt(哨兵:1))+CONVERTNUM)移动到RECHAR
端到端IF
如果((功能ORD(INPUTT(哨兵:1))>=(功能ORD('A'))和
(作战命令(INPUTC(哨兵:1))(作战命令(“Z”)功能)
检查INPUTC(哨兵:1)用RECHAR替换所有INPUTC(哨兵:1)
其他的
检查INPUTC(哨兵:1)用RECHAR替换所有INPUTC(哨兵:1)
端到端IF
其他的
检查INPUTC(哨兵:1)将所有INPUTC(哨兵:1)替换为INPUTC(哨兵:1)
端到端IF
计算哨兵=哨兵+1
--->末端执行
显示输入UTC。
计算LOOPI=LOOPI+1
--->结束表演。
退出程序。
结束程序求解。

在UTC中显示
之后的范围终止期间。
正在终止嵌套的
执行
语句的范围。去掉该期间,所有操作都会正常工作


将程序编码为COBOL-85标准时,过程部分中只应使用终止节和段落标题所需的句点,以及另一个终止当前段落、节或程序所需的句点。

在display INPUTC语句中有一个句点。删除该句点后,您应该就可以了。Period总是以语句结尾。

你有一个IF,它的ELSE有相同的代码。你也有一个ELSE,它用一个INSPECT替换一个字符。你为什么用INSPECT…替换一个字节的字段?为什么不移动?LOOPI是什么意思?为什么不把1加到SENTRY而不是COMPUTE?你乘-1,从零减去…就是fa但是你在执行时立即将CIPHER设置为0,那么为什么还要否定呢?我怀疑还有更多,但是你让整个事情很难用一个接一个的函数来完成。另外,在
avcdefghijklmnopqrstuvwxyz
中,你的意思可能是
abc
。。。