C++程序总金额total始终输出0该如何修正
问题原因
该问题是两个C++语法误区导致的:
- 变量赋值是即时计算的:你在代码最开头初始化
total = qty*cost时,qty和cost的值都是0,此时就已经算出total=0了。后续你修改qty和cost的值不会自动更新total的取值,它会一直保留初始计算的0。 - 局部变量遮蔽了外层变量:在选择笔记本的if分支里,你又写了
double cost = 15.50,这相当于在if分支里重新定义了一个和外层重名的局部变量,这个赋值只会生效在当前if分支内部,外层定义的cost变量根本没有被赋值,还是初始的0。
修改方案
只需要做两处修改就能解决问题:
- 删掉if分支里
cost前的double声明,直接给外层的cost变量赋值 - 在获取到用户输入的购买数量
qty之后,再手动计算total的值
修改后的完整代码如下:
{ char itemAnswer = 'a'; double qty = 0; double cost = 0; // 此处仅初始化默认值,后续再做计算 double total = 0; double payment = 0; double change = 0; std::cout << "Which item would you like to buy?" << std::endl; std::cout << "a. Notebook | b. Pencil | c. Ballpen" << std::endl; std::cin >> itemAnswer; if(itemAnswer == 'a' || itemAnswer == 'A') { // 去掉double声明,直接对外层的cost变量赋值 cost = 15.50; std::cout << "You chose notebook" << std::endl; std::cout << "Enter quantity: "; std::cin >> qty; std::cout << "You added " << qty << " of notebook/s into your cart." << std::endl; // 获取到购买数量后再计算总金额 total = qty * cost; std::cout << "Your total will be " << total << " Php" << std::endl; std::cout << "Enter payment: "; std::cin >> payment; while (payment < total) { std::cout << "You did not pay enough money" << std::endl; std::cout << "Enter money again: "; std::cin >> payment; } if (payment >= total) { change = payment - total; std::cout << "You paid " << payment << " Php" << std::endl; std::cout << "Your change is " << change << " Php" << std::endl; } } }
内容的提问来源于stack exchange,提问作者Bliss
相关产品推荐
相关产品推荐

