功能ORD仅有时起作用,但有时不起作用



我正在尝试在COBOL中编程某种凯撒密码。但是我以某种方式得到以下编译错误:

数字函数"整数函数ord"在这种情况下不允许。

此错误在这里发射(两行(

 000048                  MOVE FUNCTION ORD("A") TO a
 000049                  display function ord("A")

不是在这里

 000054                MOVE FUNCTION CHAR(FUNCTION MOD(
 000055                    FUNCTION ORD(outstring (i:1))
 000056                        - a + offset, 26) + a)
 000057                TO outstring (i:1)

i是我们正在查看的outstring的位置。a"a""A"的值,以确保我们留在26个字母中,定义为

 000018            03 a    pic S9(3).

区别在哪里?为什么第二次工作和第一个工作不做?

第二个示例有效,第一个示例无效,因为允许您将数字表达式作为函数参数,但不能将数字表达式作为MOVE语句的主题。在您的情况下,您的编译器(IBM?(认为数字固有函数呼叫是数字表达式。因此,您需要用COMPUTE替换MOVE,然后将DISPLAY中的函数调用更改为a

000048                  COMPUTE a = FUNCTION ORD("A")
000049                  DISPLAY a

最新更新