You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PERFORM VARYING时WS-INDICE溢出:到达9后重置为0

问题原因

WS-INDICE被声明为PIC 9(01),这是一位数字型数据,当它的值递增到9后,再加1会触发数值溢出回滚,值变为0而非10。此时循环的终止条件WS-INDICE > 9永远无法满足,循环会继续执行,尝试访问数组下标0的位置(而数组TEST-GROUP仅OCCURS 9次,合法下标为1-9),最终导致循环异常。

解决方案

方案1:修改索引变量的长度

将WS-INDICE的声明改为支持两位数字的类型,确保9加1后能正确变为10,触发终止条件:

01  WS-INDICE PIC 9(02).

方案2:调整循环终止条件(需配合变量长度修改)

如果保留原变量长度,可直接将终止条件改为判断索引是否达到10(需确保变量能容纳该值,因此优先推荐方案1):

PERFORM VARYING WS-INDICE FROM 1 BY 1
       UNTIL WS-INDICE = 10
       OR TEST-OBJEC(WS-INDICE) = SPACES
           MOVE TEST-OBJEC(WS-INDICE) TO WS-VAL-OBJEC(WS-INDICE)
           MOVE TEST-DATE(WS-INDICE)  TO WS-DAT-OBJEC(WS-INDICE)
       END-PERFORM

补充说明

COBOL中数字型数据的溢出处理是回滚到最小值(对于PIC 9(n)来说就是0),所以务必确保索引变量的长度足够容纳循环的最大递增值,避免溢出导致的逻辑异常。

内容的提问来源于stack exchange,提问作者Ahmed SEDDIK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:30:07