温度转换器不返回正确的值

时间:2014-10-15 07:30:26

标签: cobol 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.        

这是我接受Celcius温度并将其转换为华氏温度的程序。我创建了LOADLIBCOPYLIB。还有一个JCL用于编译和RUNJCL。没有错误,但是当我在RUNJCL中给出任何输入(例如98)时,它总是显示32作为输出。有什么问题?

1 个答案:

答案 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<