2

考虑以下代码。B的结果是什么?我的问题是 NEXT-SENTENCE 语句会影响哪个终止符?

A = 1
B = 1
C = 1

IF A = B                                  
   IF A = C                                      
      NEXT SENTENCE                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT.                 

B = 2                       
EXIT.                                                 
4

3 回答 3

5

它应该转到下一句,即紧接在第一句之后的句点之后EXIT

因此B应设置为 2。

COBOL 由句号终止的句子组成,每个句子可以包含多个语句。NEXT SENTENCE适用于句子(很有趣)。

您可能要考虑的另一件事是使用END-IF使事情变得明确。

于 2013-05-01T06:59:59.270 回答
2

B 的值将是 2。总是,每次,无论 PERFORM 中发生什么,也不管 RETKD。

IF 由第一个句号/句号终止,“下一个句子”将“转到”紧跟该句号/句号的行。

Cobol 中的 EXIT 什么都不做。没有什么。没有什么。从代码中可以看出作者(我假设您已经选择了一个用于“维护”的程序)期望 EXIT 实际执行某些操作。它没有。它是一个“无操作”动词,如 CONTINUE。

这“似乎”是一种逻辑类型(显然可以用不同的方式编写),从缩进和假设代码感觉 EXIT 做了一些事情(否则 IF 本身毫无意义,如下面的 NealB 代码所示) )。

IF  ( A EQUAL TO B )
AND ( A EQUAL TO C )                                      
    PERFORM SOMETHING THRU SOMETHING-END  
    IF RETKD NOT EQUAL TO ZERO
        MOVE 2 TO B
    ELSE 
        CONTINUE
ELSE
    MOVE 2 TO B
END-IF
.

正如 NealB 所评论的,这就是程序正在做的事情:

IF (A = B) AND (A NOT = C)
    PERFORM SOMETHING THRU SOMETHING-END
END-IF
MOVE 2 TO B

CONTINUE 和 EXIT 是等价的,实际上是可以互换的(虽然我不推荐它,因为有些人在某些代码中间看到 EXIT,往往认为它做了一些事情,不是吗?)。

对于新代码,请不要使用 NEXT SENTENCE 并且不要使用句号/句点来终止条件。对前者使用 CONTINUE,对后者使用“范围终止符”(END-IF、END-EVALUATE、END-PERFORM 等)。

试试这段代码来了解继续/退出做什么(什么都不做)。

IF A EQUAL TO B
    CONTINUE
    MOVE 2 TO A
ELSE
    IF A EQUAL TO C
        CONTINUE
        MOVE 3 TO A
    ELSE
        do something
    END-IF
    CONTINUE
    MOVE 4 TO C
 END-IF

A = 1 B = 1 C = 1

使用上述值,A 最后的值为 2,C 的值为 1。

A = 1 B = 不是 1 C = 1

现在 A 为 3,C 为 4。

A = 1 B = 非 1 C = 非 1

现在 A 为 1,C 为 4。

然后将所有 CONTINUE 更改为 EXIT 并注意结果。

于 2013-05-01T10:43:45.543 回答
1

正如paxdiablo所说,它将移至下一个句子(基本上在“。”之后)。

另外,我建议使用 Continue 而不是“NEXT SENTENCE”(并使用 end-if)。Next Sentence 可追溯到原始 Cobol,而 Continue 是通过 End-if 控件引入的

IF A = B                                  
   IF A = C                                      
      NEXT SENTENCE                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT
else
   compute e = 123.   

而在下文中,continue 将跳转到计算 ff = 321

IF A = B                                  
   IF A = C                                      
      continue                                   
   ELSE                                               
      PERFORM SOMETHING THRU SOMETHING-END  
      IF RETKD = 0                                  
         EXIT
      end-if
   end-if
   compute ff = 321 
else
   compute e = 123
end-if 
于 2013-05-01T08:50:51.870 回答