C++ 带除法的错误值
我下面有问题。在我的howmany函数中,它应该读入你有多少钱和一件物品的成本,然后它应该告诉你你可以买多少件物品和剩余的钱。到目前为止,我只能让它显示允许的项目数为0,而钱显示为输入的原始金额 任何帮助都将不胜感激,而且每当我点击Q退出程序时,我必须输入它2到3次,循环才能真正停止C++ 带除法的错误值,c++,C++,我下面有问题。在我的howmany函数中,它应该读入你有多少钱和一件物品的成本,然后它应该告诉你你可以买多少件物品和剩余的钱。到目前为止,我只能让它显示允许的项目数为0,而钱显示为输入的原始金额 任何帮助都将不胜感激,而且每当我点击Q退出程序时,我必须输入它2到3次,循环才能真正停止 #include <iostream> using namespace std; void bestbuy(double&, double&, double); void discou
#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;
}}
#包括
使用名称空间std;
作废百思买(双倍、双倍、双倍);
无效折扣结果(双倍&,双倍&);
无效数量(双倍,双倍);
字符菜单();
双倍价格1,价格2,价格3//百思买变量
双倍价格,折扣//贴现结果变量
双倍现金,项目//有多少个变量
int main()
{
字符选择;
做
{menu();
choice=菜单();}
while(choice!=“Q”);
菜单();
系统(“暂停”);
返回0;
}
void百思买(双倍增值1、双倍增值2、双倍增值3)
{
if(val1 cout有多少个
从未以任何方式将项
传递回调用方,因此它无法打印出来。我也无法快速验证它是否做了正确的事情
然后,当您调用how many
时,您会将cash
打印为项目数量,将item
打印为剩余现金,这看起来也是错误的。可能还有其他错误
您应该仔细地看一看代码,然后开始一次遍历一条代码路径
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)
我相信您可能需要在每次调用菜单时按一次“Q”
我看不需要三个
在do while
循环中,您调用菜单
,而不检查返回值。您需要为该返回值按一个字母,因此您输入“Q”,但什么也没有发生
然后,程序再次调用菜单
,这次将返回值放入变量中。因此,在此处输入“Q”
do while
循环被终止,但另一个调用被调用到菜单
。它再次提示您,因此您第三次输入了Q
您需要决定是让菜单
函数显示和接收数据,还是将功能拆分为显示器和数据检索器。对菜单
的第一次调用表明此逻辑。无论您决定什么,在整个程序中保持一致