If statement 为什么这个Cobol代码中的第二个if语句没有被计算(OpenCOBOL)?

If statement 为什么这个Cobol代码中的第二个if语句没有被计算(OpenCOBOL)?,if-statement,cobol,sentence,gnucobol,If Statement,Cobol,Sentence,Gnucobol,程序的输出很简单: 1 二, 但我希望: 1 2 2 1 国际单项体育联合会之外 我做错了什么?我是否误解了第一个if中语句的句子结构,或者句点的位置?反复试验证明问题是语法和句点位置错误的混合 这就成功地提供了预期的输出 identification division. program-id. quick. environment division. data division. working-storage section. 01 temp-v

程序的输出很简单:
1
二,

但我希望:

1
2
2
1
国际单项体育联合会之外


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

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

这就成功地提供了预期的输出

   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程序员指南中的示例代码帮助我解决了这个问题。
直截了当地说出来

   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".
在“2”之后的“.”结束if语句,则有另一个结束if和。哪种开放式Cobol可能作为过程的结束-可能不是最好的解释

正如Nick所说**不要混合编码风格

我会在每个程序结束时,在一行上单独放置一个“.”

    display "2".
   end_if.

代码有两个问题。一个是
结束if
之前的时间段


另一个是
end\u if
end if
不同。只有在Cobol中使用时才结束。如果将
作为段落名称,则
结束。因此,它不会(也不应该)产生编译器警告消息。

看起来不错。您希望到那个时候,“流浪”结束ifs会出现编译错误。不仅是第二个IF没有完成,还有接下来的显示,所以我认为你离开这一段是正确的。是的,很抱歉不清楚。这就是我所说的“编译错误”。如果版本是最新的,则没有“编译错误”这一事实表明存在“编译器错误”。如果一个“旧”版本的编译器,很可能已经修复。我不知道有哪种Cobol能够成功编译它。编译器应该注意到同样的语法错误两次。为了清晰起见,我喜欢将单句点放在段落末尾的这种风格。谢谢你的提示!您正在混合COBOL编码样式。这将导致意外的控制权转移。退房也就是说,我希望编译器在
结束if.
OK时抛出一个错误或至少一个警告,而不是luke发现问题后的编译器bug。我看到了更好的例子,而不是问题中的代码,这对我来说很好:-)@NealB谢谢你的链接,它很有帮助。敏锐的眼睛。。。这将使两段具有相同的名称(END_IF)。我不认为这是“非法的”,只是非常规的。我还认为,如果存在对其中一种情况的引用(例如,PERFORM END_if),编译器应该抛出错误/警告,因为名称无法唯一解析。这是正确的答案,因为它解释了(大部分)编译器也没有报告错误的原因。end_if作为一个段落,使加密的执行在刚刚完成一个if之后结束。未引用的重复段落名称可能是“有效的”,但由于它们都不在某一节中,因此永远无法引用它们(我认为,如果引用,它们都需要在节中才真正有效)。固定格式COBOL为诊断问题提供了一些额外的可能性,如“应该从区域a开始”:-)
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"

           .