Cobol 温度转换器不工作';t返回正确的值
这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了一个Cobol 温度转换器不工作';t返回正确的值,cobol,jcl,Cobol,Jcl,这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了一个LOADLIB和一个COPYLIB。还有一个JCL用于编译和RUNJCL。没有错误,但是当我在RUNJCL中输入任何内容(例如98)时,它总是将32显示为输出。问题出在哪里?如果得到的结果总是32,那么WS-A是零,因为乘以零加上32的值总是32 我怀疑您的JCL中有这样的内容: IDENTIFICATION DIVISION. P
LOADLIB
和一个COPYLIB
。还有一个JCL
用于编译和RUNJCL
。没有错误,但是当我在RUNJCL
中输入任何内容(例如98)时,它总是将32显示为输出。问题出在哪里?如果得到的结果总是32,那么WS-A是零,因为乘以零加上32的值总是32
我怀疑您的JCL中有这样的内容:
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.
当你接受时,你只能从中得到00
当对小测试程序使用ACCEPT时,最好显示得到的结果,以便查看
要么使WS-A变大,要么使SYSIN后面的卡上的值变小
如果可能,您还有其他问题导致WS-A的值被视为零。因此,您可以将文件2中的JCL粘贴到spool上以用于您的作业。使用它生成的行号:-)
和SYSIN卡数据(您的98)。特别注意JCL输出中的任何“SYSIN生成”语句
这是你的节目。我已经去掉了不必要的东西,并更改了WS-A和WS-B的名称。现在WS-B有了一个正确的名称,您可以在创建它时看到它的长度是错误的,它至少需要三位数字
//SYSIN DD *
00212
ID分区。
程序ID.TEMP1。
数据司。
工作和储存科。
01输入摄氏度图9(2)。
01输出-FARENHEIT图9(3)。
程序司。
接受输入摄氏度
展示
“摄氏度即将到来”
">"
输入摄氏度
""
输出-法伦海特
“看来你的问题是COBOL,我帮你解决了。(为了营救!)。粘贴时,只需突出显示要复制的代码,然后进行粘贴。行号使任何人都更难尝试您的代码。请注意您的标记。在涉及JCL的地方,请坚持使用COBOL、大型机和JCL。我怀疑您是对的。这可以通过接受整行、从行中修剪空格以及使用funct来防止错误ion num-val()转换为输入摄氏度。@JoeZitzelberger这主意不错。我稍后将详细介绍值被切碎的原因(并非所有COBOL都是这样做的),并举几个例子,了解从接受
获取数据的更安全的方法。谢谢。
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<
CELSIUS COMING IN >00<
FARENHEIT GOING OUT >032<