库存余额调整逻辑问题:如何处理负数调整避免余额为负
库存余额调整功能修正方案
问题分析
原代码的核心错误有两点:
- 先执行库存调整操作再判断,此时库存已被错误修改,后续判断失去意义
- 判断条件
n < a[i].inventory逻辑完全错误,导致正常减库存的场景(如库存17输入-2)也会触发清零
正确逻辑实现
核心思路:先预判调整后的库存状态,再决定最终值——正数直接累加;负数调整时,若结果小于0则设为0,否则正常执行减法。
修正后的代码:
printf("Increase or decrease by: "); scanf("%d", &n); if (n >= 0) { // 正数直接增加库存 a[i].inventory += n; } else { // 计算调整后的库存值 int new_inventory = a[i].inventory + n; if (new_inventory < 0) { // 调整后库存为负,强制设为0 a[i].inventory = 0; } else { // 正常减少库存 a[i].inventory = new_inventory; } }
另一种等价实现(先判断减幅)
如果倾向于先判断减少的幅度,也可以用这种写法:
printf("Increase or decrease by: "); scanf("%d", &n); if (n >= 0) { a[i].inventory += n; } else { int decrease_amount = -n; // 取负数的绝对值,即实际要减少的数量 if (decrease_amount > a[i].inventory) { a[i].inventory = 0; } else { a[i].inventory -= decrease_amount; } }
两种写法都能满足需求:输入正数时增加库存,输入负数时若减幅超过当前库存则清零,否则正常扣减。
内容的提问来源于stack exchange,提问作者Laros
相关产品推荐
相关产品推荐

