我正在尝试在Cobol中编程某种Caesar Cipher。但不知怎的,我得到以下编译错误:
在此上下文中不允许使用数字函数“INTEGER FUNCTION ORD”。
此错误在此处被触发(两行)
000048 MOVE FUNCTION ORD("A") TO a
000049 display function ord("A")
但 NOT 在这里
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).
区别在哪里?为什么第二个工作而第一个不工作?
答案 0 :(得分:5)
第二个例子有效,第一个例子不起作用,因为你允许将数字表达式作为函数参数,但你不能将数字表达式作为MOVE
语句的主语。在您的情况下,您的编译器(IBM?)将数字内部函数调用视为数值表达式。因此,您需要将MOVE
替换为COMPUTE
,并将DISPLAY
中的函数调用更改为a
。
000048 COMPUTE a = FUNCTION ORD("A")
000049 DISPLAY a