Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带除法的错误值_C++ - Fatal编程技术网

C++ 带除法的错误值

C++ 带除法的错误值,c++,C++,我下面有问题。在我的howmany函数中,它应该读入你有多少钱和一件物品的成本,然后它应该告诉你你可以买多少件物品和剩余的钱。到目前为止,我只能让它显示允许的项目数为0,而钱显示为输入的原始金额 任何帮助都将不胜感激,而且每当我点击Q退出程序时,我必须输入它2到3次,循环才能真正停止 #include <iostream> using namespace std; void bestbuy(double&, double&, double); void discou

我下面有问题。在我的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;


}}
#包括
使用名称空间std;
作废百思买(双倍、双倍、双倍);
无效折扣结果(双倍&,双倍&);
无效数量(双倍,双倍);
字符菜单();
双倍价格1,价格2,价格3//百思买变量
双倍价格,折扣//贴现结果变量
双倍现金,项目//有多少个变量
int main()
{
字符选择;
做
{menu();
choice=菜单();}
while(choice!=“Q”);
菜单();
系统(“暂停”);
返回0;
}
void百思买(双倍增值1、双倍增值2、双倍增值3)
{
if(val1cout
有多少个
从未以任何方式将
传递回调用方,因此它无法打印出来。我也无法快速验证它是否做了正确的事情

然后,当您调用
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

您需要决定是让
菜单
函数显示和接收数据,还是将功能拆分为显示器和数据检索器。对
菜单
的第一次调用表明此逻辑。无论您决定什么,在整个程序中保持一致