Cobol 温度转换器不工作';t返回正确的值

Cobol 温度转换器不工作';t返回正确的值,cobol,jcl,Cobol,Jcl,这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了一个LOADLIB和一个COPYLIB。还有一个JCL用于编译和RUNJCL。没有错误,但是当我在RUNJCL中输入任何内容(例如98)时,它总是将32显示为输出。问题出在哪里?如果得到的结果总是32,那么WS-A是零,因为乘以零加上32的值总是32 我怀疑您的JCL中有这样的内容: IDENTIFICATION DIVISION. P

这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了一个
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<