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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:25:17