我想知道是否有人可以向我解释COBOL中嵌套IF语句中的点数。例如:
*The first if statement*
IF SUCCESSFUL-STATUS
PERFORM 8300-REPL-LNNTBI00
THRU 8300-REPL-LNNTBI00-EXIT
*The second if statement*
IF SUCCESSFUL-STATUS
DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
ELSE
DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / '
WS-RETURN-STATUS
READ INFILE INTO WS-INF-REC.
哪个if语句在" WS-INF-REC"之后放置了一个点?属于?第一个IF还是第二个IF-ELSE?我知道在大多数编程中,它应该是最后一个if语句,但只是为了确保它对COBOL是否相同?
答案 0 :(得分:5)
AFAIR句点总是关闭所有前面的语句 - 无论它们是IF
,PERFORM
还是其他 - 所以在你的情况下,第一个IF
- 语句也会关闭。由于时间段很小而且很容易被忽略,我使用以下规则:
避免使用句号,它们是邪恶的!
只放置语法规则严格要求的时间段,而不是其他地方。使用明确的范围终结符,例如END-IF
或END-PERFORM
。它们使您的代码更具可读性和结构清晰度,而由于多个闭包以及隐藏在普通视图中的习惯,这些时间段往往会产生混淆。
答案 1 :(得分:3)
这是非常糟糕的,非常古老的Cobol,但它的表现如下:
*The first if statement*
IF SUCCESSFUL-STATUS
PERFORM 8300-REPL-LNNTBI00
THRU 8300-REPL-LNNTBI00-EXIT
*The second if statement*
IF SUCCESSFUL-STATUS
DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
ELSE
DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' WS-RETURN-STATUS
READ INFILE INTO WS-INF-REC
END-IF ## from period
END-IF ## from period
答案 2 :(得分:3)
句号字符"。"结束所有if语句。请记住,编译器会忽略间距,因此READ语句是第二个IF语句的ELSE的一部分。
我们人类希望看到逻辑上使用的缩进。并且,如果是我,我会做出结果 - 如果是明确的。我倾向于每段有一个句号:
* The first if statement *
IF SUCCESSFUL-STATUS
PERFORM 8300-REPL-LNNTBI00
THRU 8300-REPL-LNNTBI00-EXIT
* The second if statement*
IF SUCCESSFUL-STATUS
DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
ELSE
DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / '
WS-RETURN-STATUS
READ INFILE INTO WS-INF-REC
END-IF
END-IF
.