首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COBOL Beer on the Wall Program

COBOL Beer on the Wall Program
EN

Stack Overflow用户
提问于 2018-03-26 01:20:48
回答 1查看 137关注 0票数 2

我做的"99瓶“计划,但与用户输入了多少下来。我对COBOL非常陌生,我肯定忽略了一些简单的东西,或者只是完全用错误的方式思考这个问题。

以下是我目前的情况:

代码语言:javascript
复制
   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子句在以下语句(或数据除法)中为负值,这样它将从计数器中减去:

代码语言:javascript
复制
       PERFORM VARYING COUNTER FROM 99 BY NUM UNTIL COUNTER = 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-08 04:46:30

我在这里看到了一些问题。

首先,这是从已褪色的内存中得到的,但我似乎还记得,VARYING子句对于增量需要一个常量值。我认为您无法使用实际更改的NUM来完成此操作。

因此,您的循环最好不要使用VARYING子句,而是类似于(这里的代码在语法上可能不是正确的COBOL,它更多地是为了显示意图和/或方法):

代码语言:javascript
复制
set counter to 99
perform until counter = 0
    blah blah blah then change counter
end perform

第二,如果允许你一次拿出一个以上的瓶子,你的小曲就不再有意义了。押韵第三节的语句应修改为类似于瓶左节:

代码语言:javascript
复制
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

最后,您可能希望避免这样的情况:您移除的瓶子比现有的(或少于一个)更多。这可以通过在获得用户输入后立即执行这些限制(夹紧)来实现:

代码语言:javascript
复制
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

您也可以抱怨并要求用户输入有效的数量,但最简单的解决方案可能只是将其夹住。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49482700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档