COBOL编写整除判断程序报level 88无效错误 如何返回布尔值
错误原因
你遇到的88层无效使用错误,核心问题是FAL对应的取值定义为范围值1 THRU 99:在IBM兼容COBOL标准中,执行SET 条件名 TO TRUE操作时,要求该88条件名必须对应单个固定取值,不能是范围——编译器无法确定范围下要给父项RESULT写入什么具体值,因此抛出错误。
解决方案
有两种可行的修改方式,都兼容你当前的ibm-strict运行环境:
方式1:修改88层定义为单值
把FAL的取值改为单个固定值即可适配SET操作,修改后逻辑完全符合你的需求:
01 RESULT PIC 9(5). 88 TRU VALUE 0 . 88 FAL VALUE 1 .
方式2:直接给父项赋值,保留范围定义
如果你需要保留FAL的范围判断逻辑(比如后续有其他逻辑会给RESULT赋1-99之间的不同值),可以不用SET操作,直接给RESULT赋值即可:
IF FUNCTION MOD(BASE, FACTOR) = 0 THEN MOVE 0 TO RESULT ELSE MOVE 1 TO RESULT END-IF
后续判断时依然可以正常使用IF TRU THEN ...或者IF FAL THEN ...的语法。
COBOL布尔值处理说明
COBOL本身没有内置的布尔类型,你当前用的88层条件名方案是行业内最通用的布尔值实现方式,除此外还有两种常见写法:
- 用字符型字段存储:定义
01 FLAG PIC X. 88 IS-TRUE VALUE 'Y'. 88 IS-FALSE VALUE 'N'.,兼容性最好,所有COBOL标准都支持 - 高版本COBOL标准支持
PIC BOOL类型可以直接存储TRUE/FALSE,但兼容性差,不适合你当前的IBM兼容环境使用
修正后完整代码
IDENTIFICATION DIVISION. PROGRAM-ID. CHECKER. DATA DIVISION. WORKING-STORAGE SECTION. 01 BASE PIC 9(5). 01 FACTOR PIC 9(2). 01 RESULT PIC 9(5). 88 TRU VALUE 0 . 88 FAL VALUE 1 . PROCEDURE DIVISION. CHECK-FOR-FACTOR SECTION. IF FUNCTION MOD(BASE, FACTOR) = 0 THEN SET TRU TO TRUE ELSE SET FAL TO TRUE END-IF. END PROGRAM CHECKER.
内容的提问来源于stack exchange,提问作者MSS2001
相关产品推荐
相关产品推荐

