输入未正确存储在变量中

时间:2014-12-06 03:48:59

标签: input converter cobol temperature

我正在创建一个用作温度转换器的程序(CELSIUS TO KELVIN和VICE VERSA)。但我的代码有问题(或者编译器中可能存在问题.Idk)。起初,我以为我使用的是错误的公式。但是当我通过显示它来检查存储在变量中的输入时,它只显示输入的一位数。例如..我的输入是15,它只需要'1'..或者说45,它只需要'4'..我声明输入如下:

01 CELSIUS PIC S9(2)V99. 

通过上面的例子,它给了我:01.00或04.00请帮助。

 IDENTIFICATION DIVISION. ------------------ 
 PROGRAM-ID. temp. 
 ENVIRONMENT DIVISION. ------------------ 
 CONFIGURATION SECTION. 
 *----------------------- 
 INPUT-OUTPUT SECTION. *----------------------- 
 DATA DIVISION. ------------------ 
 FILE SECTION. *----------------------- 
 WORKING-STORAGE SECTION.

 01    TEMP-CELSIUS    PIC S9(2)V99.
 01    CELSIUS-RESULT    PIC +ZZ9.99.
 01    TEMP-KELVIN    PIC S9(2)V99.
 01    KELVIN-RESULT    PIC +ZZ9.99.
 01    VAR-OPTION    PIC X.
 01    X            PIC S9(5)V99.
*-----------------------
 PROCEDURE DIVISION.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
 MAIN-PROCEDURE.
**
* The main procedure of the program
**

    DISPLAY 'OPTION 1: CELSIUS TO KELVIN'
    DISPLAY 'OPTION 2: KELVIN TO CELSIUS'
    DISPLAY 'ENTER YOUR OPTION: '
    ACCEPT VAR-OPTION

    MOVE +273.15 TO X
    IF VAR-OPTION = '1'
    DISPLAY 'ENTER CELSIUS:      '
        ACCEPT TEMP-CELSIUS
        DISPLAY TEMP-CELSIUS
       ADD X TEMP-CELSIUS GIVING KELVIN-RESULT
        DISPLAY KELVIN-RESULT
    ELSE
    IF VAR-OPTION = '2'
        DISPLAY 'ENTER KELVIN:       '
        ACCEPT TEMP-KELVIN
        DISPLAY TEMP-KELVIN
        SUBTRACT X FROM TEMP-KELVIN GIVING CELSIUS-RESULT
        DISPLAY CELSIUS-RESULT

   END-IF
   STOP RUN.
** add other procedures here
END PROGRAM temp.

1 个答案:

答案 0 :(得分:1)

ACCEPTDISPLAY是COBOL动词,编译器编写者具有最广泛的非标准实现(出于好的理由,这些编写者希望本机COBOL从用户获取屏幕输入和提供屏幕输出)。

使用Gnu COBOL 2.0,您的程序没有您正在寻找的错误。我对Micro Focus的几个编译器也有同感。

根据您对DISPLAY输出的描述(带小数点),我很惊讶您的代码并没有达到目的。但是我们需要知道编译器。如果您正在显示实际代码,并且没有隐藏的编译器选项/ swtiches,那么我的猜测是从您接受的任何内容中删除S(隐式符号)。

其他一些评论。

您似乎将程序的第一部分视为" main",就像在其他一些语言中一样。忘记这个想法,"主要"是COBOL没有的一个非常不同的东西。

如果您有像MAIN-PROCEDURE这样的标签(程序名称),请不要发表评论,说明这是#34;这是主要程序"。

为什么要拨打任何X?使用好的描述性名称。

使用88级条件名称进行1/2测试。期待使用EVALUATE而不是嵌套IF。你可能还没有做过这些事情,如果你有的话可以使用它们,如果你还没有查找它们,那么你在引入它们时会更好地了解它们。

为什么叫VAR-?调用VAR-当它只能是一个字段(变量)时,浪费空间来获得一个好名字。

对于你的程序错误的部分(你还不知道),要始终注意COBOL有固定长度的字段,你告诉COBOL的长度,所以你告诉它的长度总是是一个正确的大小。我不能将水的沸点转换成任何比例,只能将冰点从摄氏温度转换为开尔文。