GnuCobol 3.1.2.0报错'EOF'未定义,求解决方案
GnuCobol编译错误:'EOF' is not defined 解决方法
编译GnuCobol代码时出现programName:25: error: 'EOF' is not defined错误,原因是EOF不是GnuCobol的内置变量,必须手动在工作存储区定义这个用于判断文件结束的开关变量。
原错误代码
IDENTIFICATION DIVISION. PROGRAM-ID. INCOME-TAX-CALCULATOR. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "employees.csv" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 02 EMP-ID PIC 9(5). 02 EMP-NAME PIC X(30). 02 EMP-SALARY PIC 9(7). 02 EMP-TAX PIC 9(5). WORKING-STORAGE SECTION. 01 WS-TAX-RATE PIC 9(4)V99 VALUE 20. PROCEDURE DIVISION. OPEN INPUT EMPLOYEE-FILE PERFORM UNTIL EOF READ EMPLOYEE-FILE AT END SET EOF TO TRUE END-READ COMPUTE EMP-TAX = EMP-SALARY * WS-TAX-RATE DISPLAY EMP-ID, EMP-NAME, EMP-SALARY, EMP-TAX END-PERFORM CLOSE EMPLOYEE-FILE STOP RUN.
修改后的正确代码
IDENTIFICATION DIVISION. PROGRAM-ID. INCOME-TAX-CALCULATOR. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "employees.csv" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 02 EMP-ID PIC 9(5). 02 EMP-NAME PIC X(30). 02 EMP-SALARY PIC 9(7). 02 EMP-TAX PIC 9(5). WORKING-STORAGE SECTION. 01 WS-TAX-RATE PIC 9(4)V99 VALUE 20. 01 EOF PIC X(1) VALUE 'N'. // 定义文件结束开关变量 PROCEDURE DIVISION. OPEN INPUT EMPLOYEE-FILE PERFORM UNTIL EOF = 'Y' // 通过变量值判断循环终止条件 READ EMPLOYEE-FILE AT END SET EOF TO 'Y' // 设置标记表示文件结束 END-READ IF NOT EOF = 'Y' THEN // 避免处理空记录 COMPUTE EMP-TAX = EMP-SALARY * WS-TAX-RATE / 100 // 修正税率计算逻辑 DISPLAY EMP-ID, EMP-NAME, EMP-SALARY, EMP-TAX END-IF END-PERFORM CLOSE EMPLOYEE-FILE STOP RUN.
关键修改点
- 在
WORKING-STORAGE SECTION中显式定义EOF变量,指定类型为单字符并初始化为'N'(未结束)。 - 循环终止条件改为判断
EOF = 'Y',而非直接使用未定义的EOF标识符。 - 文件结束时将
EOF设置为'Y',匹配变量定义的类型。 - 增加条件判断包裹计算和显示逻辑,避免处理文件结束后读取到的空记录。
- 修正税额计算:原代码中20代表20%税率,需除以100才能得到正确的税额。
内容的提问来源于stack exchange,提问作者Juanjo
相关产品推荐
相关产品推荐

