为什么没有评估此Cobol代码中的第二个if语句(OpenCOBOL)?

时间:2013-04-17 19:19:36

标签: if-statement cobol sentence gnucobol

   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或句点位置内的语句的句子结构?

3 个答案:

答案 0 :(得分:4)

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

另一个是end_ifend-if不同。 Cobol中仅使用end-ifend_if被视为段落名称。因此,它不会(也不应该)生成编译器警告消息。

答案 1 :(得分: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

答案 2 :(得分:1)

直言不讳

    display "2".
   end_if.

''。'在“2”结束if语句之后,你有另一个end_if和。哪个Open-Cobol可能正在采取程序结束 - 可能不是最好的解释。

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

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

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"

           .