- IBM主机技术一本通
- 吕新民编著
- 694字
- 2020-08-26 22:17:25
6.8 CONTINUE和NEXT SENTENCE语句
短语NEXT SENTENCE语句表示要跳到下一个句号(.)后面的语句,而不是紧跟在NEXT SENTENCE语句后面的语句,这是很多程序员最容易想当然出现的错误。在下面的例子中,当SEX既不是‘F’也不是‘M’时,程序并不会像程序员想象的那样,帮你累加GRADE为A的人员合计数,而会直接执行第33行的DISPLAY语句,因为句号出现在第34行的END-IF的后面,NEXT SENTENCE总是跳去执行最近的句号(.)后面的下一条语句。
语句CONTINUE用来指定一个空操作,即什么也不做,但会将控制转到紧靠着CONTINUE语句的下一条语句而不是转到下一个句号(.)后面的语句去执行,这就是它与NEXT SENTENCE语句的最大区别。实际上,在我们的程序设计规范中,要求程序员不要使用NEXT SENTENCE语句,因为它可能误导你去错误的地方。我们建议在程序中使用CONTINUE语句,因为它更接近于我们所说的“下一条语句”。
下面的例子证实了我们对这两条语句的理解,第29行的NEXT SENTENCE并没有跳到第32行去执行,而是直接执行了第1个句号(第34行的END-IF)之后的第35行的DISPLAY语句,这在报表的第1行得到了验证。
第44行的CONTINUE语句则是跳到了紧跟在IF语句之后的第47行的DISPLAY语句和随后的ADD语句,这样就会有报表的第2行和第3行的结果。
6.8.1 程序例子(CONTINUE和NEXT SENTENCE语句)
000001 IDENTIFICATION DIVISION. 000002 * 000003 PROGRAM-ID. CONTINU1. 000004 AUTHOR. NEWMAN LV. 000005 * 000006 ENVIRONMENT DIVISION. 000007 * 000008 INPUT-OUTPUT SECTION. 000009 * 000010 DATA DIVISION. 000011 * 000012 000013 FILE SECTION. 000014 * 000015 WORKING-STORAGE SECTION. 000016 77 WS-GRADE PIC X(01) VALUE 'A'. 000017 77 WS-SEX PIC X(01) VALUE SPACE. 000018 77 WS-TOTAL-A PIC 9(02) VALUE 0. 000019 * 000020 PROCEDURE DIVISION. 000021 MOVE ZERO TO WS-TOTAL-A 000022 IF WS-GRADE = 'A' 000023 IF WS-SEX = 'M' 000024 DISPLAY 'MAN - CLASS A' 000025 ELSE 000026 IF WS-SEX = 'F' 000027 DISPLAY 'WOMEN - CLASS A' 000028 ELSE 000029 NEXT SENTENCE 000030 END-IF 000031 END-IF 000032 DISPLAY '***NEXT SENTENCE IS NOT HERE!!!' 000033 ADD 1 TO WS-TOTAL-A 000034 END-IF. 000035 DISPLAY 'NEXT SENTENCE, WS-TOTAL-A IS:' WS-TOTAL-A 000036 * 000037 IF WS-GRADE = 'A' 000038 IF WS-SEX = 'M' 000039 DISPLAY 'MAN - CLASS A' 000040 ELSE 000041 IF WS-SEX = 'F' 000042 DISPLAY 'WOMEN - CLASS A' 000043 ELSE 000044 CONTINUE 000045 END-IF 000046 END-IF 000047 DISPLAY '***CONTINUE IS HERE!!!' 000048 ADD 1 TO WS-TOTAL-A 000049 END-IF 000050 DISPLAY 'CONTINUE, WS-TOTAL-A IS:' WS-TOTAL-A 000051 * 000052 STOP RUN.
6.8.2 运行结果报表(CONTINUE和NEXT SENTENCE语句)
000001 NEXT SENTENCE, WS-TOTAL-A IS:00 000002 ***CONTINUE IS HERE!!! 000003 CONTINUE, WS-TOTAL-A IS:01