COBOL中的数据类型

Lou*_*ang 4 cobol gnucobol

我写了下面的程序,我很困惑,为什么当我编译程序时,我得到一个错误,说A-COL(1,1)不是数值,而显示A-COL(1,1)给我1.

   IDENTIFICATION DIVISION.
   PROGRAM-ID. TEST1.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 DIFF PIC 9(3).
       01 ARRAY.
           05 A-ROW OCCURS 99 TIMES.
               10 A-COL OCCURS 2 TIMES.
                   15 TABLE-CONTENT PIC 9(3).

   PROCEDURE DIVISION.
       MOVE 1 TO A-COL(1,1).
       MOVE 2 TO A-COL(2,1).
       DISPLAY A-COL(1,1).
       COMPUTE DIFF = A-COL(1,1) - A-COL(2,1).
       DISPLAY DIFF.
   STOP RUN.
Run Code Online (Sandbox Code Playgroud)

unc*_*ion 5

将A-COL定义更改为

"10 A-COL PIC 9(3) OCCURS 2 TIMES."
Run Code Online (Sandbox Code Playgroud)

并删除TABLE-CONTENT.

组变量被认为是字母数字(X类型),因此不能用于计算.

或者,您可以这样做 - 使用实际数字字段引用地址位置.

PROCEDURE DIVISION.
   MOVE 1 TO TABLE-CONTENT(1,1).
   MOVE 2 TO TABLE-CONTENT(2,1).
   DISPLAY A-COL(1,1).
   COMPUTE DIFF = TABLE-CONTENT(1,1) - TABLE-CONTENT(2,1).
   DISPLAY DIFF.
Run Code Online (Sandbox Code Playgroud)

您也可以DIFF签名.

附加信息

A-COL(1,1)显示"1",因为它将数据存储为"1xx",其中x =空格.那不是数值.当您在此处运行解决方案时,您会注意到显示行产生"001".