我正在创建一个用作温度转换器的程序(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.
答案 0 :(得分:1)
ACCEPT
和DISPLAY
是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的长度,所以你告诉它的长度总是是一个正确的大小。我不能将水的沸点转换成任何比例,只能将冰点从摄氏温度转换为开尔文。