考虑以下代码。 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.
答案 0 :(得分:5)
它应该转到下一句,紧接在第一个EXIT
之后的句号之后。
因此B
应设为2。
COBOL由句点终止的句子组成,每个句子可以包含多个语句。 NEXT SENTENCE
用于句子(有趣的是)。
您可能要考虑的另一件事是使用END-IF
来使事情明确。
答案 1 :(得分:2)
B的值将是2.始终,每次,无论PERFORM中发生什么,无论RETKD如何。
IF在第一个完整停止/期间终止,“NEXT SENTENCE”将在该全停/周期后立即“转到”该行。
退出Cobol没事。没有。没有。从代码看来,作者(我假设你已经选择了“维护”程序)期望EXIT实际上做了些什么。它没有。这是一个“无操作”动词,如CONTINUE。
这似乎是“逻辑的类型”(显然可以用不同的方式编写)直接来自缩进和代码感觉EXIT做了某些事情的假设(否则IF本身是没有意义的,如NealB's所示)代码包含在下面)。
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等)。
尝试使用这段代码来了解CONTINUE / EXIT的作用(NOTHING)。
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并记下结果。
答案 2 :(得分:1)
正如paxdiablo所说,它将转移到下一句话(基本上是在'。'之后)。
另外,我建议使用Continue而不是'NEXT SENTENCE'(并使用end-if's)。 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.
在下文中,继续将跳转到 compute 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