Linux环境下COBOL计算平均值出现编译错误求助
COBOL编译错误修复方案
错误原因分析
你遇到的两个错误都指向CALC-AVG段落中的SUM函数调用:
calcavg.cob:30: error: 'INTS' requires one subscript:编译器无法识别INTS(1:NUM-OF-INTS)这种数组范围引用语法,它要求每个数组元素必须明确指定单个下标。- 段落级错误是由上述语法错误直接导致的连锁问题。
另外代码中还有一处显示格式错误:DISPLAY "Average: " AVG DISPLAY "ZZZ.99"不符合COBOL语法,不能连续使用两个DISPLAY语句指定输出格式。
修复后的代码
IDENTIFICATION DIVISION. PROGRAM-ID. ASSIGNMENT4. DATA DIVISION. WORKING-STORAGE SECTION. 01 NUM-OF-INTS PIC 99. 01 INT-ARRAY. 05 INTS OCCURS 15 TIMES PIC 999. 01 TOTAL PIC 9(5)V99. 01 AVG PIC 9(3)V99. 01 COUNTER PIC 99. PROCEDURE DIVISION. MAIN-LOGIC. DISPLAY "Enter number of integers to average (2-15): ". ACCEPT NUM-OF-INTS. PERFORM ACCEPT-INTS PERFORM CALC-AVG DISPLAY "Average: " AVG USING "ZZZ.99". STOP RUN. ACCEPT-INTS. DISPLAY "Enter integers to average: ". PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER>NUM-OF-INTS DISPLAY "Integer " COUNTER ": " ACCEPT INTS(COUNTER) END-PERFORM. CALC-AVG. COMPUTE TOTAL = FUNCTION SUM (INTS(1) THRU INTS(NUM-OF-INTS)) COMPUTE AVG = TOTAL / NUM-OF-INTS. EXIT.
关键修复点
- SUM函数语法修正:将
INTS(1:NUM-OF-INTS)改为INTS(1) THRU INTS(NUM-OF-INTS),这是COBOL指定数组连续元素范围的标准语法,编译器可正确识别求和的元素范围。 - 显示格式修正:合并连续的两个DISPLAY语句为
DISPLAY "Average: " AVG USING "ZZZ.99",通过USING子句指定输出格式,符合COBOL显示语法规范。
内容的提问来源于stack exchange,提问作者Steve X
相关产品推荐
相关产品推荐

