函数ord有时只工作,但有时不工作

ine*_*tom 7 cobol

我正在尝试在Cobol中编写某种Caesar Cipher.但不知何故,我得到以下编译错误:

在此上下文中不允许使用数字函数"INTEGER FUNCTION ORD".

此错误在此处被触发(两行)

 000048                  MOVE FUNCTION ORD("A") TO a
 000049                  display function ord("A")
Run Code Online (Sandbox Code Playgroud)

不是在这里

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

ioutstring我们正在关注的位置.a是确保我们保留在26个字母中的价值"a"或所"A"需要的,定义为

 000018            03 a    pic S9(3).
Run Code Online (Sandbox Code Playgroud)

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

Edw*_*d H 5

第二个示例有效,第一个示例不起作用,因为您可以将数字表达式作为函数参数,但不能将数字表达式作为MOVE语句的主题.在您的情况下,您的编译器(IBM?)将数字内部函数调用视为数值表达式.所以你需要替换MOVEwith COMPUTE并更改DISPLAYto中的函数调用a.

000048                  COMPUTE a = FUNCTION ORD("A")
000049                  DISPLAY a
Run Code Online (Sandbox Code Playgroud)