我目前正在为我的Cobol班编写一个程序来计算学生的学费。但是,我不断收到语法错误:
jdoodle.cobc: in Paragraph '100-MAIN-Module':
jdoodle.cobc:33: error: syntax error, unexpected END
jdoodle.cobc:36: error: syntax error, unexpected END
jdoodle.cobc:40: error: syntax error, unexpected END-PERFORM
我已尝试删除将其移动到其他位置,检查了拼写,并且似乎无法摆脱这些错误。
IDENTIFICATION DIVISION.
PROGRAM-ID. Tuition.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-STUDENT-FILE
ASSIGN TO 'name.dat'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUT-STUDENT-FILE
ASSIGN TO 'tuition.dat'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD IN-STUDENT-FILE.
01 IN-STUDENT-REC.
05 STUDENTNAME-IN PICTURE X(20).
05 NUMCRED-IN PICTURE 99.
05 PICTURE X(58).
FD OUT-STUDENT-FILE.
01 OUT-STUDENT-REC.
05 STUDENTNAME-OUT PICTURE X(20).
05 PICTURE X(20).
05 NUMCRED-OUT PICTURE 99.
05 PICTURE X(20).
05 TUITION-OUT PICTURE X(4).
WORKING-STORAGE SECTION.
01 TUITION PICTURE 9(4).
01 EOF PICTURE X.
PROCEDURE DIVISION.
100-MAIN-MODULE.
OPEN INPUT IN-STUDENT-FILE
OUTPUT OUT-STUDENT-FILE
PERFORM UNTIL END OF FILE = 'YES'
READ IN-STUDENT-FILE
AT END
MOVE 'YES' TO END OF FILE
NOT AT END
PERFORM 200-PROCESS-RTN
END-READ.
END-PERFORM.
CLOSE IN-STUDENT-FILE
OUT-STUDENT-FILE
STOP RUN.
200-PROCESS-RTN.
MOVE STUDENTNAME-IN TO STUDENTNAME-OUT
MOVE NUMCRED-IN TO NUMCRED-OUT
IF NUMCRED-IN < 12 THEN
MULTIPLY NUMCRED-IN BY 525 GIVING TUITION
ELSE
SET TUITION TO 6300
END-IF
MOVE TUITION TO TUITION-OUT
DISPLAY OUT-STUDENT-REC
WRITE OUT-STUDENT-REC.
我正在上课的第三周,除了提供给我们的示例程序外,这是我尝试编写的第一个程序。
您使用一个名为END OF FILE
的“变量”。对于COBOL,这是一个无效名称,因为它包含保留字END
,请改用END-OF-FILE
,这样会出现另一个错误,并显示一条更好的消息,告诉您未定义END-OF-FILE
。这样做,您应该可以走得更远。
两件事。首先,如前所述,字段名称中不能包含空格。第二:句号结束陈述而不是动词。除非必须使用,否则不要使用它们,这只是在段落的末尾;除非在段落的最后一条语句中,否则范围终止符本身也很好。
PERFORM UNTIL END-OF-FILE = 'YES'
READ IN-STUDENT-FILE
AT END
MOVE 'YES' TO END-OF-FILE
NOT AT END
PERFORM 200-PROCESS-RTN
END-READ. <- This period ends the statement not just the read
END-PERFORM. <- leaving this hanging