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

库存余额调整逻辑问题:如何处理负数调整避免余额为负

库存余额调整功能修正方案

问题分析

原代码的核心错误有两点:

  • 先执行库存调整操作再判断,此时库存已被错误修改,后续判断失去意义
  • 判断条件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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:01:01