COBOL奇偶判断程序功能异常,咨询代码存在的错误点
这段COBOL奇偶判断程序的问题如下
- 执行流程逻辑错误
过程部(PROCEDURE DIVISION)的第一行代码就是GOBACK,会直接让程序结束返回,后续EVEN-OR-ODD段的奇偶判断逻辑完全不会被执行,这是最核心的功能失效原因。就算移除该GOBACK语句,也需要在合适位置增加PERFORM EVEN-OR-ODD主动调用判断逻辑,或者将判断逻辑直接写在过程部入口位置。 - 数据项层级定义错误
WORKING-STORAGE SECTION中,01是最高层级的数据项级别,后续02级的Answer没有对应的父级01组项,属于语法错误,程序无法正常编译。正确写法有两种:要么把Answer也定义为01级,要么将两个变量归属到同一个组项下:
01 校验参数组. 02 Num-1 PIC 9(02). 02 Answer PIC XXXX.
- 赋值指令使用错误
COMPUTE指令仅用于数值计算场景,给字符型变量Answer赋值字符串需要用MOVE指令,原代码中用COMPUTE给字符变量赋值属于语法错误。正确写法是:
IF FUNCTION REM(NUM-1, 2) = 0 MOVE "Even" TO ANSWER ELSE MOVE "Odd" TO ANSWER END-IF
- 缺少入参/赋值逻辑
变量Num-1没有初始化赋值,也没有配置输入逻辑,运行时值是不确定的,即便判断逻辑能执行也无法得到预期结果。 - 命名不规范(非致命但易引发冲突)
自定义的判断段名EVEN-OR-ODD和程序ID完全重名,部分编译器可能会报命名冲突错误。
内容的提问来源于stack exchange,提问作者user16878837
相关产品推荐
相关产品推荐

