错误的值与分区
我有以下问题。在我的howmany函数中,它应该读取您有多少钱以及一个物品的成本,然后它应该告诉您可以购买多少物品以及剩余的货币。到目前为止,我所能得到的所有项目数量都是0,货币数量显示为输入的原始数量。错误的值与分区
任何帮助将不胜感激,也无论何时我打Q退出程序,我必须输入它2或3次循环实际停止。
#include <iostream>
using namespace std;
void bestbuy(double&, double&, double);
void discountresults (double&, double&);
void howmany(double&, double&);
char menu();
double price1, price2, price3;//bestbuy variables
double price, discount;//discountresults variables
double cash,item;//howmany variables
int main()
{
char choice;
do
{menu();
choice = menu();}
while(choice != 'Q');
menu();
system ("PAUSE");
return 0;
}
void bestbuy(double &val1,double &val2, double val3)
{
if (val1 < val2 && val1 < val3)
val2 = 1;
else if (val2 < val1 && val2 < val3)
{val1 = val2;
val2 = 2;}
else
{val1 = val3;
val2 = 3;}
}
void discountresults(double &price, double &discount)
{
double hold;
hold = price;
price *= discount; //discount amount
hold -= price;
discount = hold; //price after discount
}
void howmany(double &money, double &itemcost)
{
double items;
items = money/itemcost;
itemcost = itemcost * items;
money = money - itemcost;
}
char menu()
{
char option;
cout<<"(B)est Buy Calculation.\n";
cout<<"(D)iscount Calculation.\n";
cout<<"(H)ow Many Calculation.\n";
cout<<"(Q)uit.\n";
cout<<"Please enter the option B, D, H, or Q\n";
cin>>option;
switch(option)
{
case 'B':
cout<<"Please enter 3 prices\n";
cin>>price1;
cin>>price2;
cin>>price3;
bestbuy(price1,price2,price3);
cout<<"Your lowest price entered was "<<price1<<" and it was the "<<price2<<" number you entered.\n";
break;
case 'D':
cout<<"Please enter price of item and discount percent\n";
cin>>price;
cin>>discount;
discountresults(price,discount);
cout<<"Your discount amount is "<<price<<" and the discounted price is "<<discount<<endl;
break;
case 'H':
cout<<"Please enter amount of money available and cost of item\n";
cin>>cash;
cin>>item;
howmany(cash,item);
cout<<"You can buy "<<cash<<" of that item and have $"<<item<<" left over\n";
break;
case 'Q':
return option;
}}
void howmany(double &money, double &itemcost)
{
double items;
items = money/itemcost;
itemcost = itemcost * items;
money = money - itemcost;
}
在数学上,这个函数总是返回零:itemcost = itemcost * (money/itemcost)
始终计算为money
(一个数值误差)。因此money - itemcost
等于零(同样,数值错误)。
您需要考虑到您只能购买整件物品的事实。由于这是作业,因此找出最佳做法是留作练习。
还要记住,当您通过引用传递事件时,修改后的值对调用者可见。你可能需要考虑一下你是否真的要参照这里传递money
和itemcost
:
void howmany(double &money, double &itemcost)
howmany
从未通信items
回其以任何方式调用程序,所以没有办法它可以打印出来。我也无法快速验证它是否做得正确。
然后,当您拨打howmany
时,打印出cash
作为项目的数量,并将item
作为现金余额打印出来,这也是错误的。可能还有其他的错误。
您应该花很长时间仔细查看代码,并且一次开始单步执行一个代码路径。
办公桌检查您的代码! –
我相信你可能需要打“Q”一次,每次调用menu
。
我不认为需要3个。
在do-while
循环中,您可以在不检查返回值的情况下调用menu
。你需要按这封信的一个字母,所以你输入'Q',什么都不会发生。
该程序然后遇到第二个电话menu
,这次将返回值放入一个变量。所以你在这里输入'Q'。
do-while
循环终止,但另一个呼叫是menu
。它会再次提示您,因此您第三次输入Q
。
您需要决定是否让menu
函数显示并接收数据或将功能拆分为显示器和数据检索器。对menu
的第一个电话表明了这一逻辑。无论您决定什么,在整个计划中保持一致。
您是否尝试过调试? – crashmstr
没有缩进让我难过。 –