C语言统计数值出现次数的函数每次返回相同值问题求助
问题根因
你的update_level函数中所有if条件语句的末尾都多写了多余的分号;,这是导致逻辑异常的核心原因。
C语言中if的语法规则是:if(条件) 执行语句,如果条件后紧跟分号,代表这个if对应的执行语句是空语句,条件判断结果仅决定是否执行这个无意义的空语句,和后续大括号包裹的代码块没有任何关联。大括号内的代码会不受判断条件限制,按代码顺序无条件执行。
当你把pointsAmount >=50的判断放在最上层时,大括号里的return 5会第一个被无条件执行,自然不管输入什么值,函数都会直接返回5。
修复方案
删除所有if条件末尾的多余分号即可,修正后的update_level函数代码如下:
int update_level(int pointsAmount) { int update_level = 0; if (pointsAmount >= 0&&pointsAmount <= 9) { update_level=0; return update_level; } if (pointsAmount >= 10&&pointsAmount <= 19) { update_level=1; return update_level; } if (pointsAmount >= 20&&pointsAmount <=29) { update_level=2; return update_level; } if (pointsAmount >= 30&&pointsAmount <=39) { update_level=3; return update_level; } if (pointsAmount >= 40&&pointsAmount <=49) { update_level=4; return update_level; } if (pointsAmount >=50) { update_level=5; return update_level; } // 兼容输入为负数的边界情况,可根据业务需求调整返回值 return -1; }
可选优化
你的区间规则是每10个数值对应一个索引,50及以上统一返回5,可以直接用整数除法简化代码,不需要写多个if判断:
int update_level(int pointsAmount) { if (pointsAmount < 0) return -1; // 负数输入处理,按需调整 return pointsAmount >=50 ? 5 : pointsAmount / 10; }
内容的提问来源于stack exchange,提问作者inkystinky33
相关产品推荐
相关产品推荐

