2017-10-01 13 views
2

私は単純なC++気圧のプログラムを作ってるんだが、私は預金をするか、撤退後のバランスが変化してもらうとのトラブルを抱えています。単純なC++ ATM(変数入力のバランスをとる格納することはできません)

// C++ ATM 

#include "std_lib_facilities.h" 

int main() 
{ 
    bool card_is_inserted = false; 
    double balance = 0.0; 
    //double new_balance = balance; 


    // HOME 

    //Starts over if variable is false 
    while (card_is_inserted == false) 
    { 
     cout << "Wellcome to Well's Fargo ATM " << '\n' 
     << "Insert card Yes or No"<< endl; 
     string request; 
     getline(cin,request); 

     // Function is needed for aceppting different no's and yes's 
     //-=-=-=--=-==--=-=-==-==-=--==--=-=- 
     // loads atm 
     if (request == "yes") 
     { 
      cout << "Alright, Your current balance is:" << endl 
      << balance << endl; 
      card_is_inserted = true; 
     } 

     // home 
     string option = "cancel"; 

     while (card_is_inserted == true) 
     { 
      cout << "Would you like to withdraw or deposit? (Cancel)"<< endl; 
      getline(cin,option); 

      double cash_ = 0; 

      if (option == "deposit") 
      { 
       cout << "How much money would you like to deposit?" << endl; 
       cin >> cash_; 
       double new_deposit_balance = balance + cash_; 

       cout << "You placed: $" << cash_ << endl 
        << "Your New Balance is: $" << new_deposit_balance << endl; 
      } 

      if (option == "withdraw") 
      { 
       cout << "How much money would you like to withdraw?" << endl; 
       cin >> cash_; 
       double new_witdraw_balance = balance - cash_; 

       if(balance <= 0) 
       { 
        cout << "You don't have: $" << cash_ << endl; 
       } 
       else 
       { 
       cout << "You toke: $" << cash_ << endl 
       << "Your New Balance is: $"<< new_witdraw_balance << endl; 
       } 
      } 

      if (option == "cancel") 
      { 
       cout << "Ok, bye" << endl; 
       card_is_inserted = false; 
      } 
     } 
    } 
} 

例:私は預金を作る(または撤退)するには、yesを入力し、12.50のようなシンプルなダブルを置き、それは私に12.50になります私の現在の残高を示しています。その後私は.50を残して12.00を撤回したい。しかし、バランス変数に以前の値の12.50が格納されていないため、私は傾けることができません。私は "double new_balance = balance"を作ろうとしましたが、速やかに動作しません。

+1

高度なトピックノートです。精度がお金バランスのように、必要とされる場所 'お金のために使用されることはありませんdouble' double'は(0.1000000000000000055511151231257827021181583404541015625''としてdouble' 'に格納されて0.1''例えばのように、正確にすべての一般的な金額を表すことができない 'として、量それは 'double'で' 0.1'に近づくかもしれません)。 (そしてこれらの誤差が蓄積する可能性がありますので、10回の0.1回の預金を行い、10回ごとに1.0を撤回する場合、残高はゼロではなく+0.5(または+ 5、10e18の土地がわからない))。 – Ped7g

+0

私はそれを見ましたが、それを修正する方法についてはわかりません。今私はタイプされた文字の数を制限しようとしているので、誰も9,100回は入力しません。もしあなたが私に偉大なヒントを与えることができたら。 – Pep3

+0

それは些細な話題ではなく、現時点ではそれほど心配する必要はありません。ちょっと空き時間(おそらく[this](http://floating-point-gui.de/)を読んで、コンピュータの仕組みを完全に理解していることを確認してください整数型(ビット数で最小値/最大値を定義する方法)を使用すると、FP IEEE 754がどのように機能するかを知ることができます。コンピュータの計算上の限界を完全に理解し、算術演算を順序付けて、合計誤差。バランスを取りながら、フォーマッタを小数点以下2桁に設定してください: 'cout.precision(2);'これはしばらくの間エラーを隠します。 – Ped7g

答えて

1

balancenew_witdraw_balanceまたはnew_deposit_balanceに設定していません。あなたがbalanceの値に持参されているので、

double new_deposit_balance = balance + cash_;balance値を設定しませんが、balancebalance + cash_の結果を割り当てていません。

balance = new_deposit_balance;のようなものを、coutの文の後にそれぞれifの末尾に入れる必要があります。

if(option == "deposit") 
{ 
    cout << "How much money would you like to deposit?" << endl; 
    cin >> cash_; 
    double new_deposit_balance = balance + cash_; 

    cout << "You placed: $" << cash_ << endl << "Your New Balance is: $" << new_deposit_balance << endl; 

    balance = new_deposit_balance; // this 
} 

if(option == "withdraw") 
{ 
    cout << "How much money would you like to withdraw?" << endl; 
    cin >> cash_; 
    double new_witdraw_balance = balance - cash_; 

    if(balance <= 0) 
    { 
     cout << "You don't have: $" << cash_ << endl; 
    } 
    else 
    { 
     cout << "You toke: $" << cash_ << endl << "Your New Balance is: $"<< new_witdraw_balance << endl; 
     balance = new_witdraw_balance; // and this 
    } 

}

0

ラインdouble new_deposit_balance = balance + cash_;new_deposit_balanceに新しいバランスを割り当てますが、その後、あなたは(値を印刷除く)その変数と何もしません。新しい残高を維持したい場合は、実際にではなくと変更する必要があります。balance = balance + cash_;またはbalance += cash_;のように変更してください。

変数double new_deposit_balanceは定義されているifブロックにのみ存在するため、ifブロックを離れるとnew_deposit_balanceの情報が失われます。一方、balanceはifブロックとwhileループの外側で定義されているため、その値はATM操作全体を通じて維持されます。もちろん

、あなたもnew_witdraw_balanceに同じ修正プログラムを適用する必要があると思います。

関連する問題