You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GnuCOBOL编译报错:City-Data无法下标,求解决方案

问题分析与修复方案

错误原因

你遇到的编译错误核心来自两个问题:

  • 表引用错误:你错误地将01层组名City-Temps作为下标/索引引用的对象,但实际带OCCURS属性的可索引表是它下属的City-Temps-Array。编译器无法识别对普通组名的下标操作,因此抛出类似"City-Data cannot be subscripted"的错误(这里的City-Data应为代码拼写或粘贴失误,对应你代码里的City-Temps)。
  • 连锁语法误判:由于表引用的语法错误,编译器无法正确解析后续代码结构,进而误报"PERFORM statement not terminated by END-PERFORM"。

修复后的完整代码

IDENTIFICATION DIVISION.
   PROGRAM-ID. Assignment00.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 Temperature PIC 9(3)V9(1).
   01 Counter PIC 9(2) VALUE 1.
   01 City-Names.
      05 City-Name OCCURS 5 TIMES PIC X(10) VALUE 
         'Montreal', 'Ottawa', 'Toronto', 'Kingston', 'Cornwall'.
   01 City-Temps.
      05 City-Temps-Array OCCURS 5 TIMES
         INDEXED BY City-Index.
         10 Temp OCCURS 5 TIMES PIC 9(3)V9(1).
   01 Total-Temperature PIC 9(5)V9(1).
   01 Average-Temperature PIC 9(3)V9(1).

   PROCEDURE DIVISION.
   MAIN-LOGIC.
       PERFORM VARYING City-Index FROM 1 BY 1 UNTIL City-Index > 5
         DISPLAY "ENTER the last 5 daily high temperatures for: " 
         City-Names(City-Index)
         PERFORM ACCEPT-TEMPERATURES
         PERFORM CALCULATE-AVERAGE
         DISPLAY "Average temperature for " 
         City-Names(City-Index) " is " Average-Temperature "C"
       END-PERFORM
       STOP RUN.

   ACCEPT-TEMPERATURES.
       PERFORM VARYING Counter FROM 1 BY 1 UNTIL Counter > 5
         DISPLAY "Enter temperature #" Counter ": "
         ACCEPT Temperature
         MOVE Temperature TO Temp(Counter) OF City-Temps-Array(City-Index)
       END-PERFORM.

   CALCULATE-AVERAGE.
       COMPUTE Total-Temperature = 0
       PERFORM VARYING Counter FROM 1 BY 1 UNTIL Counter > 5
          ADD Temp(Counter) OF City-Temps-Array(City-Index) TO 
          Total-Temperature
       END-PERFORM
       COMPUTE Average-Temperature = Total-Temperature / 5.

关键修复点

  • 修正表引用逻辑:将所有City-Temps(City-Index)替换为City-Temps-Array(City-Index)——只有定义了OCCURS和INDEXED BY的City-Temps-Array才能被下标/索引引用。
  • 自动消除连锁错误:表引用修复后,编译器能正确识别PERFORM语句的闭合结构,"PERFORM未终止"这类误判错误会自动消失。

内容的提问来源于stack exchange,提问作者Cindy Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:07:25