2017-06-06 56 views
7

我想在Cobol中編程某種Caesar Cipher。但不知何故,我得到以下編譯錯誤:函數ord只能在有時但有時不能運行

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). 

哪裏不同?爲什麼第二個工作和第一個不工作?

+0

只是說:我不能解決這個問題,因爲我們沒有使用ascii,而是其他的一個to z不是按順序但是有間隙.. – inetphantom

回答

5

第二個示例工作正常,第一個示例不會因爲您允許將數字表達式作爲函數參數使用,但不能將數字表達式作爲MOVE語句的主題。在你的情況下,你的編譯器(IBM?)認爲數字內部函數調用是一個數字表達式。因此,您需要將MOVE替換爲COMPUTE,並將DISPLAY中的函數調用更改爲a

000048     COMPUTE a = FUNCTION ORD("A") 
000049     DISPLAY a 
相關問題