2011-02-02 81 views
0

嘿家伙所以这是我的程序,我需要通知用户,如果她/她输入的信件不是w d b或w,这是一个无效的请求。到目前为止,我做了什么,但是当我向dollars_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 2011-02-02 07:19:32

+0

我的坏,它只是格式化这样,我不知道为什么 – TJL 2011-02-02 07:22:05

回答

2

当然可以。您的代码表示:

  • 如果它是一个 'W' 做点什么
  • ...
  • 如果它是一个 'Q' 做的事,其他大喊 “无效”

所以如果用户没有输入'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

链中的if语句到如果,否则,如果else-如果别的。

0

在我的老CS类,我会做这样的事情:

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来满足您的需求。并且在每个案例分支之后放置一个“break”声明。

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.";