0

こんにちは、私はここで異常な問題を抱えています。購入の合計金額と購入に対して与えられた金額に基づいて、釣り銭として与えられる紙幣と硬貨の数を決定する両替商クラスを作成しました。たとえば、$12.04 で何かを購入しようとしていて、$20 ドルの請求書を渡した場合、おつりは $7.96 になります。

出力は次のようになります。

0 twenty dollar bill(s)  
0 ten dollar bill(s)  
1 5 dollar bill(s)  
2 1 dollar bills(s)  
3 quarter(s)  
2 dime(s)  
1 penny(s)  

今問題は、ポインターまたは参照を使用して、各紙幣と硬貨の番号を返す必要があるということです。

私のプログラムには、整数へのポインターを使用して、変更に必要な $20、$10、$5、および $1 の請求書の数を返す GetBills という 2 つの関数があります。

もう 1 つは GetCoins で、ここでも整数へのポインターを使用して、変更に必要な 4 分の 1 ダイム、ニッケル、およびペニーの数を返します。

私の問題はこれです。私の GetBills はポインターに値を保存していませんが、私の GetCoins は保存しています。購入価格に 12.04 を入力し、金額を指定して 20.00 を入力すると、出力は次のようになります。

0 twenty dollar bill(s)
0 ten dollar bill(s)
0 5 dollar bill(s)
0 1 dollar bills(s)
3 quarter(s)
2 dime(s)
1 penny(s)

そのため、硬貨の値は良好ですが、紙幣の値は見られません。GetBills のポインターが適切な値を格納しない原因は何ですか?

ここに私の短縮コードがあります:

MoneyChanger.h

class MoneyChanger
{
private:
double amountP, amountG, totalChange;
int twenty, ten, five, one, change;
int quarter, dime, nickel, penny;
public:
void GetBills(int *twenties, int *tens, int *fives, int *ones);
void GetCoins(int *quarters, int *dimes, int *nickels, int *pennies);
};

MoneyChanger.cpp

void MoneyChanger::setData(double pp, double given)
{
amountP = pp;
amountG = given;
CalcChange();
}
void MoneyChanger::CalcChange()
{
 while(totalChange >= 20){totalChange = totalChange-20; twenty++;}
 while(totalChange >= 10){totalChange = totalChange-10; ten++;}
 while(totalChange >= 5){totalChange = totalChange-5; five++;}
 while(totalChange >= 1){totalChange = totalChange-1; one++;}
 while(totalChange >= .25){totalChange = totalChange-.25; quarter++;}
 while(totalChange >= .10){totalChange = totalChange-.10; dime++;}
 while(totalChange >= .05){totalChange = totalChange-.05; nickel++;}
 while(totalChange >= .01){totalChange = totalChange-.01; penny++;}

}
double MoneyChanger::GetTotalChange()
{
totalChange = amountG - amountP;
    return totalChange;
}
void MoneyChanger::GetBills(int *twenties, int *tens, int *fives, int *ones)
{
*twenties = twenty;
*tens = ten;
*fives = five;
*ones = one;
CalcChange();
}
void MoneyChanger::GetCoins(int *quarters, int *dimes, int *nickels, int *pennies)
{
*quarters = quarter;
    *dimes = dime;
*nickels = nickel;
*pennies = penny;
CalcChange();
 }

メイン.cpp

int main()
{
MoneyChanger mc;
int twenties, tens, fives, ones, quarter, dimes, nickels, pennies;
double purchase, given;
cout<<"please enter total cost of purchase: ";
cin>>purchase;
cin.ignore();
cout<<"\nplease enter amount given: ";
cin>>given;
mc.setData(purchase, given);
cin.ignore();
cout<<"Your change is: "<<mc.GetTotalChange()<<"\n\n";

mc.GetBills(&twenties, &tens, &fives, &ones);
mc.GetCoins(&quarter, &dimes, &nickels, &pennies);

cout<<twenties<<" twenty dollar bill(s)"<<endl;
cout<<tens<<" ten dollar bill(s)"<<endl;
cout<<fives<<" five dollar bill(s)"<<endl;
cout<<ones<<" one dollar bill(s)"<<endl;
cout<<quarter<<" quarter(s)"<<endl;
cout<<dimes<<" dime(s)"<<endl;
cout<<nickels<<" nickel(s)"<<endl;
cout<<pennies<<" penny(s)"<<endl;
return 0;
}
4

1 に答える 1

0

私はあなたの問題がGetBillsありGetCoinsCalcChange割り当ての前に関数を最初に呼び出す必要があると思います。bills/coins メンバー変数を 0 に初期化したと仮定すると、 への最初の呼び出しでGetBills、渡​​されたすべての bills が 0 に設定されます。関数は、bils と coins の値がどうあるべきかを計算します。コイン メンバー変数の呼び出しでは、呼び出しからGetCoinsの正しい値が既に設定されています。CalcChangeGetBills

calcChangeこれらの関数の両方を引き出して(複数回呼び出すと冗長になるため)、メインで次のようなことを行うことをお勧めします。

cout<<"Your change is: "<<mc.GetTotalChange()<<"\n\n";

mc.calcChange();

mc.GetBills(&twenties, &tens, &fives, &ones);
mc.GetCoins(&quarter, &dimes, &nickels, &pennies);
于 2013-02-22T21:28:44.260 に答える