cobol - 如果用户在 COBOL 中输入,输入文件中的十进制值

标签 cobol

又是一个 COBOL 问题。我一直在玩 COBOL,问题是,我必须在输入文件中输入一个十进制值。所以输入文件中的输出应该是这样的:

2019-00042Alexander Bell           1.501.752.25
...

数字是测验中的成绩。 1.00 至 5.00。 所以我假设在我的代码中名为 INF-PRINT-LINE 的打印行中,我必须将其声明为:

01  INF-PRINT-LINE.
    02 SNO-IN PIC X(10).
    02 SNAME-IN PIC X(25).
    02 Q1-IN PIC 9.9(2).
    02 Q2-IN PIC 9.9(2).
    02 Q3-IN PIC 9.9(2).

现在,在 WORKING-STORAGE SECTION 上,我声明了三个单独的变量 (STUD-QX-IN),以便稍后将其移至 >INF-PRINT-LINE 变量(QX-IN)可以在这里看到:

01 STUD-Q1-IN PIC 999.
01 STUD-Q2-IN PIC 999.
01 STUD-Q3-IN PIC 999.

现在,当这个程序被执行时,我将有机会看到 STUD-QX-INQX-IN 的值是什么,因为 DISPLAY 行,将显示在第 45 列,因此程序现在在命令行中应该看起来像这样:

    ENTER STUDENT NUMBER:         2019-00042
    ENTER STUDENT NAME:           Alexander Bell
    ENTER QUIZ 1:                 150       150       0.00
    ENTER QUIZ 2:                 175       175       5.00
    ENTER QUIZ 3:                 225       225       5.00
                             ENTER ANOTHER STUDENT(Y/N)

现在如您所见,传递到 QX-IN 变量的只是 STUD-QX-INlast 数字>,输入文件现在会像这样而不是我想的那样:

2019-00042Alexander Bell           0.005.005.00
...

我应该在 STUD-QX-IN 上声明什么,以便我可以将正确的值传递给 QX-IN?我确实在 STUD-QX-IN 上尝试了 PIC 9V99,但它也不起作用。 QX-IN PIC子句的值到底是不是错了?

完整代码如下:

      * -----------------------------
       IDENTIFICATION DIVISION.
       PROGRAM-ID. exercise.
      * -----------------------------
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
      *    INPUT
           
      *    OUTPUT
           SELECT INF-STUD-GRADES ASSIGN TO "STUDENTGRADES.DAT".
       DATA DIVISION.
       FILE SECTION.
       FD  INF-STUD-GRADES.
       01  INF-PRINT-REC PIC X(80).
       WORKING-STORAGE SECTION.
       *> INPUT THE ANSWER IN THIS SECTION
       01  INF-PRINT-LINE.
           02 SNO-IN PIC X(10).
           02 SNAME-IN PIC X(25).
           02 Q1-IN PIC 9.9(2).
           02 Q2-IN PIC 9.9(2).
           02 Q3-IN PIC 9.9(2).
       01  ANS PIC X VALUE 'Y'.
       01  L PIC 9.
       01 STUD-NO-IN PIC X(10).
       01 STUD-NAME-IN PIC X(25).
       01 STUD-Q1-IN PIC 999.
       01 STUD-Q2-IN PIC 999.
       01 STUD-Q3-IN PIC 999.
       SCREEN SECTION.
       01  BSCRN.
           02  BLANK SCREEN.
       PROCEDURE DIVISION.
           OPEN OUTPUT INF-STUD-GRADES.
           PERFORM INPUT-GRADES-RTN UNTIL ANS = 'N' OR ANS = 'n'.
           PERFORM CLOSE-INPUT-GRADES-RTN.
           PERFORM FINAL-CLOSE-RTN.

       INPUT-GRADES-RTN.
           DISPLAY BSCRN.
           MOVE 4 TO L.
           DISPLAY "ENTER STUDENT NUMBER: " LINE L COLUMN 5.
           ACCEPT STUD-NO-IN LINE L COLUMN 35.
           MOVE STUD-NO-IN TO SNO-IN.
           ADD 1 TO L.
           DISPLAY "ENTER STUDENT NAME: " LINE L COLUMN 5.
           ACCEPT STUD-NAME-IN LINE L COLUMN 35.
           MOVE STUD-NAME-IN TO SNAME-IN.
           ADD 1 TO L.
           DISPLAY "ENTER QUIZ 1: " LINE L COLUMN 5.
           ACCEPT STUD-Q1-IN LINE L COLUMN 35.
           DISPLAY STUD-Q1-IN LINE L COLUMN 45.
           MOVE STUD-Q1-IN TO Q1-IN.
           DISPLAY Q1-IN LINE L COLUMN 55.
           ADD 1 TO L.
           DISPLAY "ENTER QUIZ 2: " LINE L COLUMN 5.
           ACCEPT STUD-Q2-IN LINE L COLUMN 35.
           DISPLAY STUD-Q2-IN LINE L COLUMN 45.
           MOVE STUD-Q2-IN TO Q2-IN.
           DISPLAY Q2-IN LINE L COLUMN 55.
           ADD 1 TO L.
           DISPLAY "ENTER QUIZ 3: " LINE L COLUMN 5.
           ACCEPT STUD-Q3-IN LINE L COLUMN 35.
           DISPLAY STUD-Q3-IN LINE L COLUMN 45.
           MOVE STUD-Q3-IN TO Q3-IN.
           DISPLAY Q3-IN LINE L COLUMN 55.
           ADD 2 TO L.
           
           WRITE INF-PRINT-REC FROM INF-PRINT-LINE BEFORE 1 LINE.

           DISPLAY "ENTER ANOTHER STUDENT(Y/N)" LINE L COLUMN 30.
           ACCEPT ANS.

       CLOSE-INPUT-GRADES-RTN.
           CLOSE INF-STUD-GRADES.

       FINAL-CLOSE-RTN.
           STOP RUN.

最佳答案

您需要将定义为 9v99 的字段移动到输出字段。 v 表示假定的小数位。

你能做的是

    01 work fields
       03 STUD-Q1-IN PIC 999.
       03 STUD-Q1-IN-V redefines STUD-Q1-IN PIC 9v99.
       03 STUD-Q2-IN PIC 999.
       03 STUD-Q2-IN-V redefines STUD-Q2-IN PIC 9v99.
       03 STUD-Q3-IN PIC 999.
       03 STUD-Q3-IN-V redefines STUD-Q3-IN PIC 9v99.

然后你会做

           MOVE STUD-Q1-IN-V TO Q1-IN.

你也可以这样做

     compute Q1-IN = STUD-Q1-IN / 100
     end-compute

重新定义关键字

Redefines 关键字可让您为字段提供不同的定义

如果你这样做

    Move 123     to STUD-Q1-IN.

然后

  STUD-Q1-IN = 123
  STUD-Q1-IN-V = 1.23

关于cobol - 如果用户在 COBOL 中输入,输入文件中的十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65454867/

相关文章:

refactoring - 重写遗留代码

cobol - 在 Cobol 中获取当前行号

cobol - 将 COBOL 二进制显示为数字

c - 执行外部函数后 printf 不工作

cobol - 假定十进制作为输入 - Tab 并输入添加尾随零

cobol - 什么是开始使用 COBOL 编程的好资源?

cobol - 嵌入式 SQL 中主机变量的动态数量

cobol - 将十六进制移动到 cobol 中的 comp 声明变量

java - 如何将 COBOL COMP、COMP-1 和 COMP-2 转换为 Java Long 或 Int