IDENTIFICATION DIVISION.
PROGRAM-ID. TEMP1 .
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9(2).
01 WS-B PIC 9(2).
PROCEDURE DIVISION.
ACCEPT WS-A.
COMPUTE WS-B ROUNDED = ( ( 9 / 5 ) * WS-A ) + 32.
DISPLAY WS-B.
STOP RUN.
这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了LOADLIB
和COPYLIB
。还有一个JCL
用于编译和RUNJCL
。没有错误,但是当我在RUNJCL
中给出任何输入(例如98)时,它总是显示32作为输出。有什么问题?
答案 0 :(得分:3)
如果你得到的结果总是32,那么WS-A就是零,因为有些东西乘以零而加32则总是32。
我怀疑你的JCL中有这样的东西:
//SYSIN DD *
00212
当你接受ACCEPT时,你只能获得00.
当使用ACCEPT进行小测试程序时,最好显示你得到的内容,这样你就可以看到。
使WS-A变大,或者在SYSIN变小后使卡上的值变小。
如果还有其他问题导致WS-A的值被视为零。那么,您可以将文件2中的JCL粘贴到JOB的假脱机上。使用它生成的行号: - )
和SYSIN卡数据(你的98)。请特别注意JCL输出中的任何“SYSIN generated”语句。
这是你的计划。我已经摆脱了不必要的东西,并改变了WS-A和WS-B的名称。现在WS-B有一个正确的名称,你可以看到,当你创建它是一个错误的长度,它需要至少三位数。
ID DIVISION.
PROGRAM-ID. TEMP1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUT-CENTIGRADE PIC 9(2).
01 OUTPUT-FARENHEIT PIC 9(3).
PROCEDURE DIVISION.
ACCEPT INPUT-CENTIGRADE
DISPLAY
"CELSIUS COMING IN "
">"
INPUT-CENTIGRADE
"<"
COMPUTE OUTPUT-FARENHEIT ROUNDED
= ( ( 9 / 5 )
* INPUT-CENTIGRADE )
+ 32
DISPLAY
"FARENHEIT GOING OUT "
">"
OUTPUT-FARENHEIT
"<"
GOBACK
.
运行程序的输出是:
CELSIUS COMING IN >98<
FARENHEIT GOING OUT >208<
使用“0098”运行此版本的程序进行输入:
CELSIUS COMING IN >00<
FARENHEIT GOING OUT >032<