【发布时间】: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