GnuCOBOL编译报错:City-Data无法下标,求解决方案
问题分析与修复方案
错误原因
你遇到的编译错误核心来自两个问题:
- 表引用错误:你错误地将01层组名
City-Temps作为下标/索引引用的对象,但实际带OCCURS属性的可索引表是它下属的City-Temps-Array。编译器无法识别对普通组名的下标操作,因此抛出类似"City-Datacannot 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
相关产品推荐
相关产品推荐

