2016-07-27 3 views
-3

オプションを除いて、他のすべてのオプションは、オプション1を除いて動作します。それは無限ループに入ります。この動作を修正するためにdo-whileループを設定するにはどうすればよいですか?誰かがこの問題を解決するのに役立つことができますか?条件がtrueに設定されているときにdo ... whileループが複数回ループするのを防ぐ方法

#include <iostream> 
#include <queue> 
#include <stack> 
#include <vector> 
#include <unordered_map> 
#include <algorithm> 
using namespace std; 

#include<iostream> 
#include<string> 
#include<iomanip> 
#include<cstdlib> 
using namespace std; 

class Bank{ 

    //data members 
private: 
    string customer_name; 
    double account_number; 
    string type_of_account; 
    double account_balance; 
    double balance; 


    //function declaration 
public: 
    void assignInitialValue(void); 
    void deposit(); 
    void makeWithdrawal(); 
    void displayNameAndBalance(); 
    void displayDetails(); 
}; 

//function definitions 
void Bank::assignInitialValue(void){ 
    cout<<"Welcome to Our Bank."<<endl; 
    cout<<"To open an Account with us,please supply the following details"<<endl; 
    cout<<"Enter your name in full"<<endl; 
    cin>>customer_name; 
    cout<<"Choose an Account type"<<endl; 
    cin>>type_of_account; 
    cout<<"Enter your Account Number"<<endl; 
    cin>>account_number; 
    cout<<"Enter an Amount you will like to open this account with"<<endl; 
    cin>>account_balance; 
    cout<<"Thank you for banking with us"; 
} 

void Bank::deposit(void){ 
    scout<<"Enter the amount you want to deposit"<<endl; 
    double deposit_amount = 0.0; 
    cin>>deposit_amount; 
    account_balance = account_balance + deposit_amount; 
    cout<<"Your new balance is now:"<<account_balance; 
    balance = account_balance; 
} 

void Bank::makeWithdrawal(void){ 
    int withdrawal_amount; 
    cout<<"\nBalance Amount = "<<balance; 
    cout<<"\nPlease Enter the Amount you want to withdraw:-"; 
    cin>>withdrawal_amount; 
    if(!(withdrawal_amount > balance)) 
     balance=balance-withdrawal_amount; 
    else 
    { 
     cout<<"Insufficient Balance"; 
    } 
    cout<<"Your Available Balance is:"<<balance; 
} 
void Bank::displayDetails(void) 
{ 
    cout<<endl<<endl<<endl; 
    cout<<setw(50)<<"CUSTOMER DETAILS"<<endl; 
    cout<<setw(50)<<"Customer Name "<<customer_name<<endl; 
    cout<<setw(50)<<"Account Number."<<account_number<<endl; 
    cout<<setw(50)<<"Account Type"<<type_of_account<<endl; 
    cout<<setw(50)<<"Balance"<<balance<<endl; 
} 

int main() 
{ 
    Bank app; 
    int Activity_code; 

    do 
    { 
     cout<<"\n\nAvailable Transactions\n\n"; 
     cout<<"1) To create Account with us press 1\n"; 
     cout<<"2) To make deposit press 2\n"; 
     cout<<"3) To make Withdrawal press 3\n"; 
     cout<<"4) To Display All Details press 4\n"; 
     cout<<"5) EXIT\n"; 
     cout<<"Please enter an Activity choice :-"; 

     cin>>Activity_code; 


     switch(Activity_code) 
     { 
      case 1: app.assignInitialValue(); 
       break; 
      case 2: app.deposit(); 
       break; 
      case 3: app.makeWithdrawal(); 
       break; 
      case 4: app.displayDetails(); 
       break; 
      case 5: goto terminate; 
     } 
    }while(true); 
terminate: 
    return 0; 
} 
+0

期待される動作は何ですか? –

+4

真剣においてください。理解できない形でフォーマットすることができない場合、誰もあなたのコードを読んでくれません。今回はあなたのためにそれを行ったが、時間を取るためにポイントを作ってください。それは重要ではないと思うかもしれませんが、十数個のソースファイルに数十万行以上を流しているときに違いがあります。 – WhozCraig

+0

折りたたまれている部分を指定してください。 –

答えて

1

私はまったく珍しい話題ですので、私はこれを答えにするかもしれません。

>>は、1つの空白で区切られたトークン(別名1語)しか読み取れないため、cin >>customer_name;は「John Smith」に多くの問題があります。これにより、ストリーム内の "Smith"は、type_of_accountに解析され、ストリームは非常に悪い状態になり、cin.clearおよびcin.ignoreでクリーンアップされないと無限ループになります。一度に複数の単語を読むには、std::getlineを読むことをお勧めします。

+0

user4581301 cin.ignore()はこれを大部分解決するのに役立ちましたが、問題は、顧客名を出力しようとすると空白になり、account_numberを印刷しようとすると顧客名が表示されることです。それを修正するように見えることはできません。あなたの入力のためのThanx。 –

+0

@HenryNnonyeluここで起こっているのは、 'cin.ignore'がヒットしてから左端の改行を食べているということです。 'ignore'に集中しないでください。エラー発生後にクリーンアップに使用してください。あなたが本当に望んでいるのは、一度にすべての行のユーザー入力を読むことができることです。そのためには 'std :: getline'が必要です – user4581301

0

入力が予期しないものである場合は、先に問題があります。あなたのプログラムはダブルを期待していますが、あなたの入力は適切に変換できないものです。この場合、cinのバッファはクリアされず、あなたのループはあなたに再度尋ねることなく入力を受け、何度も何度も繰り返されます。

文字列を入力に使用し、読み込み後に変換することをお勧めします。それはまだあなたの入力を検証していないため、これは遠く離れて完璧にされてからであることを

void Bank::assignInitialValue(void){ 
    cout<<"Welcome to Our Bank."<<endl; 
    cout<<"To open an Account with us,please supply the following details"<<endl; 
    cout<<"Enter your name in full"<<endl; 
    cin>>customer_name; 
    cout<<"Choose an Account type"<<endl; 
    cin>>type_of_account; 
    cout<<"Enter your Account Number"<<endl; 
    string temp1; 
    cin>>temp1; 
    istringstream convert1(temp1); 
    convert1>>account_number; 
    cout<<"Enter an Amount you will like to open this account with"<<endl; 
    string temp2; 
    cin>>temp2; 
    istringstream convert2(temp2); 
    convert2>>account_balance; 
    cout<<"Thank you for banking with us"; 
} 

注:ここで は修正機能assignInitialValue()です。

関連する問題