Cobol的语法帮助

问题描述 投票:2回答:2

我目前正在为我的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.

我正在上课的第三周,除了提供给我们的示例程序外,这是我尝试编写的第一个程序。

syntax cobol
2个回答
1
投票

您使用一个名为END OF FILE的“变量”。对于COBOL,这是一个无效名称,因为它包含保留字END,请改用END-OF-FILE,这样会出现另一个错误,并显示一条更好的消息,告诉您未定义END-OF-FILE。这样做,您应该可以走得更远。


0
投票

两件事。首先,如前所述,字段名称中不能包含空格。第二:句号结束陈述而不是动词。除非必须使用,否则不要使用它们,这只是在段落的末尾;除非在段落的最后一条语句中,否则范围终止符本身也很好。

  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
© www.soinside.com 2019 - 2024. All rights reserved.