函数 ord 有时有效但有时无效
Function ord works only sometimes but sometimes not
我正在尝试在 Cobol 中编写某种 Caesar Cipher。但不知何故我得到以下编译错误:
Numeric function "INTEGER FUNCTION ORD" was not allowed in this context.
这里会触发此错误(两行)
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
是确保我们留在 26 个字母中所需的 "a"
或 "A"
的值,定义为
000018 03 a pic S9(3).
哪里不一样了?为什么第二个有效而第一个无效?
第二个示例有效,而第一个示例无效,因为您可以将数值表达式作为函数参数,但不能将数值表达式作为 MOVE
语句的主题。在您的情况下,您的编译器 (IBM?) 将数字内部函数调用视为数字表达式。因此,您需要将 MOVE
替换为 COMPUTE
,并将 DISPLAY
中的函数调用更改为 a
。
000048 COMPUTE a = FUNCTION ORD("A")
000049 DISPLAY a
我正在尝试在 Cobol 中编写某种 Caesar Cipher。但不知何故我得到以下编译错误:
Numeric function "INTEGER FUNCTION ORD" was not allowed in this context.
这里会触发此错误(两行)
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
是确保我们留在 26 个字母中所需的 "a"
或 "A"
的值,定义为
000018 03 a pic S9(3).
哪里不一样了?为什么第二个有效而第一个无效?
第二个示例有效,而第一个示例无效,因为您可以将数值表达式作为函数参数,但不能将数值表达式作为 MOVE
语句的主题。在您的情况下,您的编译器 (IBM?) 将数字内部函数调用视为数字表达式。因此,您需要将 MOVE
替换为 COMPUTE
,并将 DISPLAY
中的函数调用更改为 a
。
000048 COMPUTE a = FUNCTION ORD("A")
000049 DISPLAY a