【发布时间】:2022-06-11 00:40:47
【问题描述】:
我正在构建一个 COBOL 程序来计算最多 15 个整数的平均值。执行显示的数字远大于预期,并带有很多尾随零。以下是相关代码:
Data Division.
Working-Storage Section.
01 WS-COUNTER PIC 9(10).
01 WS-INPUT-TOTAL PIC 9(10).
01 WS-NEXT-INPUT PIC X(8).
01 WS-CONVERTED-INPUT PIC 9(8).
01 WS-AVG PIC 9(8)V99.
Procedure Division.
PROG.
PERFORM INIT-PARA
PERFORM ADD-PARA UNTIL WS-COUNTER = 15 OR WS-NEXT-INPUT = 'q'
PERFORM AVG-PARA
PERFORM END-PARA.
INIT-PARA.
DISPLAY 'This program calculates the average of inputs.'.
MOVE ZERO TO WS-COUNTER
MOVE ZERO TO WS-INPUT-TOTAL
MOVE ZERO TO WS-AVG.
ADD-PARA.
DISPLAY 'Enter an integer or type q to quit: '
ACCEPT WS-NEXT-INPUT
IF WS-NEXT-INPUT NOT = 'q'
MOVE WS-NEXT-INPUT TO WS-CONVERTED-INPUT
ADD WS-CONVERTED-INPUT TO WS-INPUT-TOTAL
ADD 1 TO WS-COUNTER
END-IF.
AVG-PARA.
IF WS-COUNTER > 1
DIVIDE WS-INPUT-TOTAL BY WS-COUNTER GIVING WS-AVG
DISPLAY 'Your average is ' WS-AVG '.' WS-NEXT-INPUT
END-IF.
如果满足IF 条件,我将WS-NEXT-INPUT 设置为字母数字并将其移动到数字WS-CONVERTED-INPUT 的原因是因为我希望它能够使用“q”来打破UNTIL 循环,但是在满足条件之后,我想要一个用于算术语句的数字变量。以下是数字 10 和 15 作为输入时的样子:
10is program calculates the average of inputs.
Enter an integer or type q to quit:
15
Enter an integer or type q to quit:
q
Your average is 1250000000.
控制台有点问题,所以大部分时间它迫使我在左上角输入 10。不用担心。
你在那个执行中看到了我的问题。结果应该是 00000012.50 而不是 1250000000。我尝试将一些其他变量插入到该显示语句中,它们基本上都应该是除了WS-INPUT-TOTAL 之外的数字组合最终是 0025000000 0000000025 如我所料。为什么这些数字会以如此奇怪和意想不到的方式存储?
【问题讨论】:
-
你在
PICTURE字符串中使用了V,这对于计算是正确的,但是如果你想用小数点显示它你需要MOVE它到一个带有@987654331的变量@。您可能还需要在MOVE之前清理PIC X(8)字段。 -
这将是一个受欢迎的问题 - 如果您花时间将输出粘贴为文本 - 对于大多数 Q+A,图像没有多大帮助。
标签: cobol