C++代码调用getItems()后orderTotal变量重置为0.0原因咨询
问题原因及修复方案
核心问题1:参数传递方式错误
C++普通参数默认是值传递,你在getItems函数定义里写的double getItems(int choice, double orderTotal),这里第二个参数是main函数中orderTotal变量的临时副本,函数内对orderTotal的所有修改都只会作用在副本上,不会影响main函数里的原始变量,每次调用完函数原变量的值根本不会更新。
核心问题2:返回值未接收
就算getItems函数已经返回了计算后的总金额,但你在main函数调用时没有将返回值赋值给原orderTotal变量,相当于计算结果直接被丢弃了。
核心问题3:函数返回逻辑不全
你代码最后一行的//return orderTotal;被注释了,当用户选择商品后选了不继续购买(shopAgain != 'y'),会走到break逻辑,最终走到函数末尾没有执行return,属于未定义行为,返回的结果是随机值,大概率会出现重置为0的情况。
修复方案
方案1:改用引用传递(推荐)
直接修改getItems的函数定义,把第二个参数改成引用,这样函数内修改的就是main里的原变量,调用逻辑不需要改动:
// 把第二个参数改成double&,代表引用传递 double getItems(int choice, double& orderTotal) { // 其余原有代码保持不变 // 取消最后一行return的注释 return orderTotal; }
方案2:接收函数返回值
如果不想修改参数定义,就修改main里的调用逻辑,接收返回值覆盖原变量即可:
int main() { // 前面原有代码保持不变 do { displayMenu(); choice = getChoice(); // 接收返回值赋值给原变量 orderTotal = getItems(choice, orderTotal); } while (choice != 4); output(orderTotal); }
两种方案都需要先把getItems最后注释的return orderTotal;取消注释,避免出现未定义行为。
内容的提问来源于stack exchange,提问作者KnowOne
相关产品推荐
相关产品推荐

