有了这段代码,我明白了
16: Perform stmnt not terminated by end-perform
33: syntax error, unexpected end-perform
Run Code Online (Sandbox Code Playgroud)
为什么说我需要最终表演而且也不需要它?
identification division.
program-id. xxx.
* will accept and display a num until 0 is called then
* asks to go again
data division.
file section.
working-storage section.
01 num pic 9(4).
01 hold pic 9(4).
01 another pic x.
procedure division.
perform until another = 'N' (line 16)
Display "Another Session (Y/N)? "
with no advancing
if another = 'Y'
Display "Enter a 4-digit unsigned number (0 to stop): "
with no advancing
accept num
move num to hold
perform until num = 0
Display "Enter a 4-digit unsigned number (0 to stop): "
with no advancing
accept num
if num <> 0
move num to hold
end-perform.
display space
Display "The last number entered: "hold
End-perform. (Line 33)
stop run.
Run Code Online (Sandbox Code Playgroud)
end-perform.
display space
Display "The last number entered: "hold
End-perform. (Line 33)
Run Code Online (Sandbox Code Playgroud)
这是杀手的全停/周期(第30行).
虽然自1985年以来标准COBOL在全停/周期方面更加放松,但是单一的COBOL将使所有当前的范围尖叫停止.你可以将50级深度嵌套,一次完整停止/期间将一举结束.
我的建议是在PROCEDURE DIVISION中使用绝对最小值的句号.
即:一个终止PROCEDURE DIVISION标题; 一个终止每个段落/ SECTION标签; 一个终止paragrpah/SECTION; 一个终止程序(对于没有段落/ SECTIONS的程序).此外,如果您有PROCEDURE DIVISION COPY或REPLACE语句,则需要使用句号/句号来终止这些语句.
除了终止标签之外,我将每个句号/句点放在自己的一行上,从不附加到任何代码.然后我可以移动代码并插入代码,而不必担心是否需要添加/删除一个句号/句号.
至于为什么你需要END-PERFORM,它是一个"内联PERFORM".从语法上讲,内联PERFORM需要END-PERFORM,但是在END-PERFORM定位之前,使用全停止/周期导致PERFORM范围终止,因此第16行出错.随后END-PERFORM未连接到找到了PERFORM,因此第33行的错误.
在您的问题中输入错误消息时,您必须完全按照所看到的那样包含错误消息.复制/粘贴,请不要重新尝试.还包括任何消息编号.
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |