2011-02-02 21 views
0

これは私のプログラムなので、無効な要求であるw/d以外の文字が入力された場合、ユーザーに通知する必要があります。これまで何が行われているのですか?しかし、dollar_withdrawやdollars_depositやaccount_balanceに数字を入力すると、プログラムはトランザクションを行いますが、メインループに戻る前に「無効なリクエスト」を追加します。プログラムは文句を言わないそれがない数値入力のための撤退預金とバランスのためのもの?:ユーザーの入力が無効

// Atm machine.cpp : Defines the entry point for the console application. 

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

int main() 
{ 
    char user_request; 
    string user_string; 
    double account_balance, dollars_withdraw, dollars_deposit; 

    account_balance = 5000; 


    while(account_balance >0) 
    { 
     cout << "Would you like to [W]ithdraw, [D]eposit, Check your [b]alance or [Q]uit?" 
      << endl; 
     cin >> user_string; 
     user_request= user_string[0]; 
     if(user_request == 'w' || user_request== 'W') 
     { 
      cout << "How much would you like to withdraw?" << endl; 
      cin >> dollars_withdraw; 
      if (dollars_withdraw > account_balance || dollars_withdraw <0) 
      cout << "Invalid transaction" << endl; 
      else 
      account_balance = account_balance - dollars_withdraw; 
      cout << "Your new balance is $" << account_balance << endl; 
     } 
     if (user_request == 'd' || user_request== 'D') 
     { 
      cout << "How much would you like to deposit?" << endl; 
      cin >> dollars_deposit; 
      if (dollars_deposit <0) 
       cout << "Invalid transaction" << endl; 
      else 
       account_balance= account_balance + dollars_deposit; 
       cout << "Your new balance is $" << account_balance << endl; 
     } 
     if(user_request == 'b' || user_request == 'B') 
     { 
      account_balance= account_balance; 
      cout << "Your available balance is $" << account_balance << endl; 
     } 
     if(user_request == 'q' || user_request == 'Q') 
      break; 
     else 
      cout << "Invalid request " << endl; 

    } 
     cout << "Goodbye" << endl; 



    return 0; 
} 
+2

あなたのコードを再フォーマットしてくださいを... – Maxpm

+0

私の悪いが、それはちょうど私があなたがインデントしませんでしたので、それはそのようにフォーマットされた – TJL

+1

理由がある理由を知らないそのようにフォーマットされましたあなたのコード。マークダウン機能に何かがコードとして書式設定されるべきであることを知らせる方法は、各行に少なくとも4つのスペースをインデントすることです。ショートカットとして、コードブロック全体を選択し、ツールバーの '{}'ボタンをクリックすることもできます。ちょうどあなたは次回のために知っているでしょう! –

答えて

2

は確かに行うので、どのように私はそれを変更します。それは 'Q' であれば、何か

  • ...
  • を行う 'W' である場合

    • 何かを、それ以外のは "無効" 叫ぶ
    :あなたのコードは言います

    ユーザーが 'q'を入力しないと、最後の 'else'ブロックが常に実行されます。全体else ifを使用するかswitchステートメントを使用するようにコードを変更するか:

    // Either: 
    if (user_request == ...) { 
        ... 
    } else if (user_request == ...) { 
        ... 
    } else { 
        std::cout << "invalid"; 
    } 
    
    // Or (better, faster): 
    switch (user_request) { 
    case 'q': 
    case 'Q': 
        ... 
        break; 
    ... 
    default: 
        std::cout << "Invalid request"; 
    } 
    

    第三の選択肢はcontinueを使用することです:

    while (...) { 
        user_request = ... 
        if (user_request == 'w' ...) { 
         ... 
         continue; // In this iteration, no other code within the while loop is executed. 
        } 
        if (...) 
        ... 
    } 
    
  • 1

    チェーンをお使いの場合に、else-、他-if文場合if、...、else。私の古いCSクラスで

    0

    、私はこのようなことを行うだろう:

    string user_string; 
    do { 
        if(user_string) cout << "Enter a valid value!" << endl; 
        cin >> user_string; 
    } while(user_string != "w" && user_string != "d"); 
    
    2

    これは悪いプログラミングの練習です。あなたが達成する必要があるものについては、Switch Caseを使用してください。そして、すべてのcaseブランチの後に "break"ステートメントを置く。

    +0

    本当に、それは本当に彼の質問に答えるものではありません。 – Maxpm

    +2

    +1。 @Maxpm、それは*間接的に質問に答えます:)もし彼が 'switch'を使用していたら、彼はこの問題を抱えていませんでした:) –

    +0

    @Moo良い点。 – Maxpm

    0

    は、次のようにelse ifを使用する必要があります。

    if(user_request == 'w' || user_request== 'W') 
    { 
        ... 
    } else if(user_request == 'd' || user_request== 'D') 
    { 
        .... 
    } else if(user_request == 'b' || user_request== 'B') 
    { 
        ..... 
    } else if(user_request == 'q' || user_request== 'Q') 
    { 
        ... 
    } else 
    { 
        // Invalid request 
    } 
    
    1

    else文が唯一の直前if声明「を知っています」。例:

    if (myNumber == 0) 
    { 
        // Triggers when myNumber is zero. 
    } 
    
    if (myNumber == 1) 
    { 
        // Triggers when myNumber is one. 
    } 
    
    else 
    { 
        // Triggers when myNumber is not one. 
    } 
    

    これはelse ifステートメントで修正できます。あなたのケースでは、それはこのようなものになります。

    if (user_request == w) 
    { 
        // ... 
    } 
    
    else if (user_request == d) 
    { 
        // ... 
    } 
    
    // ... 
    
    else cout << "Invalid request."; 
    
    関連する問題