我做的"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发布于 2018-04-08 04:46:30
我在这里看到了一些问题。
首先,这是从已褪色的内存中得到的,但我似乎还记得,VARYING子句对于增量需要一个常量值。我认为您无法使用实际更改的NUM来完成此操作。
因此,您的循环最好不要使用VARYING子句,而是类似于(这里的代码在语法上可能不是正确的COBOL,它更多地是为了显示意图和/或方法):
set counter to 99
perform until counter = 0
blah blah blah then change counter
end perform第二,如果允许你一次拿出一个以上的瓶子,你的小曲就不再有意义了。押韵第三节的语句应修改为类似于瓶左节:
evaluate num
when 1
display "Take one down and pass it around, "
when 2 thru 99
display "Take ", num, " down and pass them around, "
end evaluate最后,您可能希望避免这样的情况:您移除的瓶子比现有的(或少于一个)更多。这可以通过在获得用户输入后立即执行这些限制(夹紧)来实现:
accept num
if num is less than one
set num to one
end if
if num is greater than counter
set num to counter
end if您也可以抱怨并要求用户输入有效的数量,但最简单的解决方案可能只是将其夹住。
https://stackoverflow.com/questions/49482700
复制相似问题