求助排查C语言项目中withinBudget函数运行结果不一致的问题
withinBudget 函数输出不稳定的原因排查
核心逻辑错误点
return 0的语句位置完全错放,直接锁死了循环遍历的范围
当前函数的写法等价于:for (int i = 0; i < n; i++) { if (匹配到目标商品且预算够) { return 1; } return 0; // 第一次循环走完直接退出,根本不会遍历后面的商品 }这个位置带来的直接后果是:程序只会检查列表里的第一个商品,不管用户选的是不是第一个商品,只要第一次循环没命中判断条件,立刻就返回“余额不足”。
这就是结果时对时错的根源:如果用户恰好选的是商品列表的第一个条目,程序能跑对判断逻辑;如果选的是第二个及之后的条目,程序连匹配都没走到就直接返回错误结果。预算判断的边界逻辑不符合常识
当前判断条件写的是itemPrices[i] < budget,意味着商品价格必须严格小于预算才算够。比如商品售价5元,用户预算刚好5元,程序会误判为余额不足。正常业务逻辑下,预算大于等于商品价格就应该算余额充足,判断条件需要调整为itemPrices[i] <= budget。循环全量遍历完成后没有明确的返回值兜底
修正return 0的位置后,如果程序走完整个循环都没找到用户输入的商品前缀,函数缺少明确的return语句,会返回栈内存里的随机值,依然会出现不稳定的输出。
修正后的函数参考实现
int withinBudget(int budget, char itemPurchased, char itemPrefixes[], int itemPrices[]) { for (int i = 0; i < n; i++) { // 先匹配用户选择的商品 if (itemPurchased == itemPrefixes[i]) { // 匹配成功后再判断预算是否足够 if (itemPrices[i] <= budget) { return 1; } // 匹配到商品但预算不足,直接返回0 return 0; } } // 循环走完都没找到对应商品,统一返回0走余额不足分支 return 0; }
内容的提问来源于stack exchange,提问作者Sulekha
相关产品推荐
相关产品推荐

