2
   identification division.
   program-id.      quick.
   environment division.
   data division.
   working-storage section.
   01 temp-val1 pic 9 value 1.
   01 temp-val2 pic 9 value 2.
   procedure division.
    mainline.
           perform encrypt.
           stop run.
    encrypt.
           if (temp-val1 = 1)
             display "1"
             display "2".
           end_if.
           if (temp-val2 = 2)
             display "2"
             display "1".
           end_if.
           display "outside the ifs".

程序的输出很简单:
1
2

但我希望:

1
2
2
1
在 ifs 之外

我究竟做错了什么?我是否误解了第一个 if 中语句的句子结构或句号的位置?

4

3 回答 3

4

代码有2个问题。一是之前的时期end-if

另一个是end_if不一样的end-if。只有end-if在 Cobol 中使用。被end_if视为段落名称。因此,它不会(也不应该)产生编译器警告消息。

于 2013-04-18T17:32:27.187 回答
2

反复试验证明问题是语法和句点放置错误的混合。

这确实提供了预期的输出。

   identification division.
   program-id.      quick.
   environment division.
   data division.
   working-storage section.
   01 temp-val1 pic 9 value 1.
   01 temp-val2 pic 9 value 2.
   procedure division.
    mainline.
           perform encrypt.
           stop run.
    encrypt.
           IF (temp-val1 = 1)
             display "1"
             display "2"
           END-IF
           if (temp-val2 = 2)
             display "2"
             display "1"
           END-IF
           display "outside the ifs".

openCobol 程序员指南中的示例代码帮助我解决了这个问题。 http://opencobol.add1tocobol.com/OpenCOBOL%20Programmers%20Guide.pdf

于 2013-04-17T19:27:37.733 回答
1

直截了当地说

    display "2".
   end_if.

这 '。' 在 "2" 结束 if 语句之后,你有另一个 end_if 和 . Open-Cobol 可能会将其作为程序的结束 - 可能不是最好的解释。

正如尼克所说 **不要混合编码风格。

个人我会放一个'。在每个过程结束时单独一行

encrypt.
           IF (temp-val1 = 1)
             display "1"
             display "2"
           END-IF
           if (temp-val2 = 2)
             display "2"
             display "1"
           END-IF
           display "outside the ifs"

           .
于 2013-04-18T01:22:52.313 回答