【问题标题】:COBOL: Read INPUT from SYSIN and store to variableCOBOL:从 SYSIN 读取 INPUT 并存储到变量
【发布时间】:2016-12-27 03:50:27
【问题描述】:

我正在尝试从 COBOL STDIN 读取 3 行输入并将它们存储到 3 个不同的变量中。我计划在这些输入上使用 COMPUTE 来执行计算。

我一直在看 TutorialsPoint(我正在自学如何编写 COBOL 代码),但无济于事。

下面是我目前的代码:

IDENTIFICATION DIVISION. 
PROGRAM-ID. SOLUTION. 

ENVIRONMENT DIVISION. 
INPUT-OUTPUT SECTION. 
FILE-CONTROL. 
SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL. 

DATA DIVISION. 
    FILE SECTION. 
    FD SYSIN. 
    01 INPUT-LINE PIC X(255).
    88 EOF VALUE HIGH-VALUES.

    WORKING-STORAGE SECTION.
    01 MEAL-COST PIC 9(2)V9(2).
    01 TIP-PERCENT PIC 9(3).
    01 TAX-PERCENT PIC 9(3).

PROCEDURE DIVISION. 
    OPEN INPUT SYSIN 
    READ SYSIN
    AT END SET EOF TO TRUE 
    END-READ

    DISPLAY MEAL-COST
    DISPLAY TIP-PERCENT
    DISPLAY TAX-PERCENT

    CLOSE SYSIN.

STOP RUN.

输入的格式为:

12.00
5
20

结果将是一个整数(在其他编程语言的意义上)。

我看到存储变量的唯一方法是,在每次连续迭代时,都有一个计数器并将其存储到每个变量(MEAL-COST、TIP-PERCENT、TAX-PERCENT)。但是,也许有更简单的方法可以做到这一点?

这就是我所做的,但我相信还有更好的方法来获取输入并将它们存储到正确的变量中。如果有人有任何建议,将不胜感激。

IDENTIFICATION DIVISION. 
PROGRAM-ID. SOLUTION. 

ENVIRONMENT DIVISION. 
INPUT-OUTPUT SECTION. 
FILE-CONTROL. 
SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL. 

DATA DIVISION. 
    FILE SECTION. 
    FD SYSIN. 
    01 INPUT-LINE PIC X(255).
    88 EOF VALUE HIGH-VALUES.

    WORKING-STORAGE SECTION.
    01 MEAL-COST PIC 9(3)V9(2).
    01 TIP-PERCENT PIC 9(3)V9(2).
    01 TAX-PERCENT PIC 9(3)V9(2).
    01 TIP PIC 9(3)V9(2).
    01 TAX PIC 9(3)V9(2).
    01 TOTAL-COST PIC 9(3)V9(2).
    01 ROUNDED-TOTAL-COST PIC 9(3).
    01 FORMATTED-RESULT PIC Z(3).

PROCEDURE DIVISION.
    OPEN INPUT SYSIN
    READ SYSIN
    AT END SET EOF TO TRUE
    NOT AT END
    MOVE INPUT-LINE TO MEAL-COST
    READ SYSIN
    AT END SET EOF TO TRUE
    NOT AT END
    MOVE INPUT-LINE TO TIP-PERCENT
    READ SYSIN
    AT END SET EOF TO TRUE
    NOT AT END
    MOVE INPUT-LINE TO TAX-PERCENT
    END-READ.

    COMPUTE TIP= (MEAL-COST * TIP-PERCENT / 100).
    COMPUTE TAX= (MEAL-COST * TAX-PERCENT / 100).

    COMPUTE TOTAL-COST= MEAL-COST + TIP + TAX.

    COMPUTE ROUNDED-TOTAL-COST ROUNDED = TOTAL-COST.

    MOVE ROUNDED-TOTAL-COST TO FORMATTED-RESULT.

    DISPLAY "The total meal cost is" FORMATTED-RESULT " dollars.". 

    CLOSE SYSIN.

STOP RUN.

【问题讨论】:

  • 我也尝试过使用ACCEPT:PROCEDURE DIVISION.OPEN INPUT SYSINACCEPT MEAL-COSTACCEPT TIP-PERCENTACCEPT TAX-PERCENTDISPLAY MEAL-COSTDISPLAY MEAL-COSTDISPLAY TIP-PERCENTDISPLAY TAX-PERCENTCLOSE SYSIN.s
  • 在使用 ACCEPT 时不要使用 OPEN。接受数据名称。根据您的编译器,您的输入是否会被转换。那么,您使用的是什么编译器/操作系统?
  • 您可能还想查看intrinsic functions,尤其是FUNCTION NUMVAL
  • @BillWoodger,从我目前所读到的内容来看,接受并不是最好的方法,但我只是尽我所能。
  • @BillWoodger 我也在 COBOL 2002 下使用 (OpenCOBOL) 1.1.0。

标签: cobol


【解决方案1】:

您无需打开/关闭您的 SYSIN。

代码:

ACCEPT MEAL-COST FROM SYSIN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多