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

结果与设置变量不匹配:跑卫单场冲球数超60,循环逻辑异常

体育模拟类程序冲球计数超标异常排查

异常表现

开发体育模拟类程序时,运行结果出现跑卫单场冲球次数达60+的反常情况,与设计预期严重不符。
已知team为程序中的数组结构,原有设计逻辑下对应冲球循环最多仅应执行25次,根本达不到60+冲球数的量级。临时测试中将循环条件硬编码为for(int g = 1; g < 20; g++)的固定上限后,依然会无理由出现冲球次数超标的问题,目前未定位到问题根源。

关联问题代码片段

hold3 = rand() % (10 - 15 + 1) + 15;

for(int g = 1; g < hold3; g++){
    
    hold = rand() % (15 - team[u].elusivness[2] + 1) + team[u].elusivness[2];
    
    if(hold == 13 || hold == 14){
        
        team[u].carries[2]++;
        
        
        hold = rand() % (17 - team[u].strength[2] + 1) + team[u].strength[2];
        
        if(hold == 13){
            
            team[u].rushingtouchdowns[2]++;
            hold = rand() % 25 + 5;
            team[u].rushingyards[2] += hold;
            
            
        }else{
            
            hold = rand() % (12 - team[u].speed[2] + 1) + team[u].speed[2];
            
            if(hold == 12){
            hold = rand() % 15 + 5;
            team[u].rushingyards[2] += hold;
            }else{
            hold = rand() % 5 + 1;
            team[u].rushingyards[2] += hold;    
            }
            
            
            
        }
        
        
        
        
    }
    
    
    
    
}

核心排查方向

  • 校验代码块的实际执行频次:确认上述冲球逻辑是否被外层循环、多回合比赛流程重复触发。即便单段循环仅执行20次,若被外层调用3次,累计冲球数就会达到60的量级,与观察到的异常表现完全匹配
  • 修正伪随机数计算的顺序错误:原代码中rand() % (10 - 15 + 1)的本意是生成10-15范围的随机数作为循环上限,但参数顺序写反后,取模运算的除数为负数,C语言环境下负数取模的结果是实现定义的,极可能生成远大于预期的hold3值,导致循环次数失控
  • 排查数组索引的合法性:检查team数组的索引u的取值范围,确认是否存在越界访问、指向无效内存的问题,避免计数写入错位导致统计值异常
  • 排查计数变量的其他累加路径:全局检索team[u].carries[2]的自增逻辑,确认是否存在其他非预期的代码块也在对该位置的计数做累加操作

内容的提问来源于stack exchange,提问作者Troy Cox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:06:03