假定十进制作为输入 - 选项卡并输入添加尾随零
assumed decimal as input - tab and enter add trailing zeros
晚上好,
我刚开始学习 Cobol,为了练习,我想编写一个简单的乘法程序,使用用户给出的两个十进制数。
所以我写了下面的
IDENTIFICATION DIVISION.
PROGRAM-ID. exo.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 a PIC 9(2)V9.
77 b PIC 9(2)V9.
77 result PIC 9(4)V99.
screen section.
1 pla-title.
2 blank screen.
2 line 1 col 1 value 'Multiplication'.
1 pls-numbers.
2 line 4 col 2 value 'Number 1 : '.
2 PIC 9(2)V9 to a required.
2 line 5 col 2 value 'Number 2 : '.
2 PIC 9(2)V9 to b required.
1 pla-result.
2 line 7 col 2 PIC 9(2)V9 from a.
2 col 7 value 'x'.
2 col 9 PIC 9(2)V9 from b.
2 col 13 value '='.
2 col 15 PIC 9(4)V99 from result.
PROCEDURE DIVISION.
display pla-title.
accept pls-numbers.
compute result = a * b.
display pla-result.
END PROGRAM exo.
这里的问题不是乘法部分,它工作得很好。问题是输入。每次我按 tab 或 enter 时,末尾都会添加一个 0。例如,键入 9,9,9,tab,9,9,9,enter 会将 900 乘以 990,因为该格式仅采用 99900(tab+enter)和 9990(enter)的最后三位数字。
我用整数尝试了相同的程序,它运行得很好。我也对实数小数 (9(2).9) 进行了同样的尝试,并且输入有效,但是我在乘法(不是数值)方面遇到了问题,我稍后会尝试理解,当时是一个问题.
所以简而言之,问题是知道为什么通过键入 tab 和 enter 来修改输入,在我的理解中,它用于导航接受字段。
非常感谢您的帮助!
accept 字段change/finish 上的输入如何自动调整取决于实际使用的compiler/runtime(在大多数情况下,在问题中添加此信息是很好的),但大多数情况下COBOL 变体需要一个“.” (或者在 DECIMAL-POINT IS COMMA
的情况下输入“,”)以获得正确的小数部分。
实际上,带有隐含小数点和 ACCEPT
的结果可能不是您想要的结果。我建议尝试使用像 ZZ9.99
这样的数字编辑字段(它在 MOVE
上自动取消编辑到你用 [if the stored data matches the editing symbols] 进行计算的字段ACCEPT
) 或普通的 PIC X
和之后的 MOVE FUNCTION NUMVAL (input-field) TO a
(这应该适用于任何包含此功能的编译器)。
晚上好,
我刚开始学习 Cobol,为了练习,我想编写一个简单的乘法程序,使用用户给出的两个十进制数。
所以我写了下面的
IDENTIFICATION DIVISION.
PROGRAM-ID. exo.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 a PIC 9(2)V9.
77 b PIC 9(2)V9.
77 result PIC 9(4)V99.
screen section.
1 pla-title.
2 blank screen.
2 line 1 col 1 value 'Multiplication'.
1 pls-numbers.
2 line 4 col 2 value 'Number 1 : '.
2 PIC 9(2)V9 to a required.
2 line 5 col 2 value 'Number 2 : '.
2 PIC 9(2)V9 to b required.
1 pla-result.
2 line 7 col 2 PIC 9(2)V9 from a.
2 col 7 value 'x'.
2 col 9 PIC 9(2)V9 from b.
2 col 13 value '='.
2 col 15 PIC 9(4)V99 from result.
PROCEDURE DIVISION.
display pla-title.
accept pls-numbers.
compute result = a * b.
display pla-result.
END PROGRAM exo.
这里的问题不是乘法部分,它工作得很好。问题是输入。每次我按 tab 或 enter 时,末尾都会添加一个 0。例如,键入 9,9,9,tab,9,9,9,enter 会将 900 乘以 990,因为该格式仅采用 99900(tab+enter)和 9990(enter)的最后三位数字。
我用整数尝试了相同的程序,它运行得很好。我也对实数小数 (9(2).9) 进行了同样的尝试,并且输入有效,但是我在乘法(不是数值)方面遇到了问题,我稍后会尝试理解,当时是一个问题.
所以简而言之,问题是知道为什么通过键入 tab 和 enter 来修改输入,在我的理解中,它用于导航接受字段。
非常感谢您的帮助!
accept 字段change/finish 上的输入如何自动调整取决于实际使用的compiler/runtime(在大多数情况下,在问题中添加此信息是很好的),但大多数情况下COBOL 变体需要一个“.” (或者在 DECIMAL-POINT IS COMMA
的情况下输入“,”)以获得正确的小数部分。
实际上,带有隐含小数点和 ACCEPT
的结果可能不是您想要的结果。我建议尝试使用像 ZZ9.99
这样的数字编辑字段(它在 MOVE
上自动取消编辑到你用 [if the stored data matches the editing symbols] 进行计算的字段ACCEPT
) 或普通的 PIC X
和之后的 MOVE FUNCTION NUMVAL (input-field) TO a
(这应该适用于任何包含此功能的编译器)。