【发布时间】:2018-03-26 01:20:48
【问题描述】:
我正在制作“99 瓶”计划,但需要用户输入要删除的数量。我对 COBOL 很陌生,我肯定忽略了一些简单的事情,或者只是完全以错误的方式思考这个问题。
以下是我目前拥有的:
IDENTIFICATION DIVISION.
PROGRAM-ID. HW.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC S99.
01 BOTTLES PIC Z9.
01 BOTTLES-REMAINING PIC Z9.
01 NUM PIC s9(02) VALUE 0.
PROCEDURE DIVISION.
PERFORM VARYING COUNTER FROM 99 BY NUM UNTIL COUNTER = 0
DISPLAY "How many bottles would you like to take down?"
ACCEPT NUM
MOVE COUNTER to Bottles
subtract NUM FROM COUNTER GIVING BOTTLES-REMAINING
DISPLAY SPACES
EVALUATE COUNTER
WHEN 1
DISPLAY " 1 bottle of beer on the wall, "
" 1 bottle of beer."
DISPLAY "Take one down and pass it around, "
"no more bottles of beer on the wall."
WHEN 2 Thru 99
DISPLAY BOTTLES " bottles of beer on the wall, "
BOTTLES " bottles of beer."
DISPLAY "Take one down and pass it around, "
BOTTLES-REMAINING
" bottles of beer on the wall."
END-EVALUATE
END-PERFORM
GOBACK.
我需要在以下语句(或数据除法)中将 NUM 子句设为负数,以便从计数器中减去:
PERFORM VARYING COUNTER FROM 99 BY NUM UNTIL COUNTER = 0
【问题讨论】:
-
如果你想让
NUM否定:MULTIPLY NUM BY -1?!?但由于该领域预计会发生变化,我建议不要使用VARYING,而是直接检查BOTTLES-REMAINING。注意:ACCEPTing 数值(尤其是可能的符号)可能无法按预期工作 - 我建议使用两个字段,一个用于 ACCEPT,一个用于减去计数器(并在它们之间使用FUNCTION NUMVAL到MOVE, 可能只有在TEST-NUMVAL显示有效输入时)。
标签: cobol