C++ 用户的输入无效

C++ 用户的输入无效,c++,C++,嘿,伙计们,这是我的程序,我需要通知用户,如果他/她输入的不是w d b或w的字母是无效的请求。到目前为止,我所做的就是这样做的,但是当我在美元取款、美元存款或账户余额中输入一个数字时,程序将进行交易,但在返回主循环之前,还会添加“无效请求”。如何更改它,使程序不会对取款存款和余额的数字输入进行更改 // Atm machine.cpp : Defines the entry point for the console application. #include <iostream>

嘿,伙计们,这是我的程序,我需要通知用户,如果他/她输入的不是w d b或w的字母是无效的请求。到目前为止,我所做的就是这样做的,但是当我在美元取款、美元存款或账户余额中输入一个数字时,程序将进行交易,但在返回主循环之前,还会添加“无效请求”。如何更改它,使程序不会对取款存款和余额的数字输入进行更改

// 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;
}
//Atm machine.cpp:定义控制台应用程序的入口点。
#包括
#包括
使用名称空间std;
int main()
{
字符用户请求;
字符串用户_字符串;
双倍账户余额、美元取款、美元存款;
账户余额=5000;
同时(账户余额>0)
{
cout user_字符串;
用户请求=用户字符串[0];
if(用户请求=='w'| |用户请求=='w')
{
不能提取美元;

如果(美元提取>账户余额| |美元提取请确认。您的代码显示:

  • 如果是“w”,做点什么
  • 如果是“q”做某事,否则喊“无效”
因此,如果用户没有输入“q”,最后一个“else”块将始终执行。请在整个过程中使用
else if
,或者将代码更改为使用
开关
语句:

// 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";
}

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

  • 如果是“w”,做点什么
  • 如果是“q”做某事,否则喊“无效”
因此,如果用户没有输入“q”,最后一个“else”块将始终执行。请在整个过程中使用
else if
,或者将代码更改为使用
开关
语句:

// 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";
}

将if语句链接到if,else if,else if,…,else中。

将if语句链接到if,else if,else if,…,else中。

在我以前的CS类中,我会这样做:

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

else if (user_request == d)
{
    // ...
}

// ...

else cout << "Invalid request.";
字符串用户\u字符串;
做{
if(user\u string)cout user\u string;
}while(user_string!=“w”&&user_string!=“d”);

在我以前的CS课程中,我会做这样的事情:

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

else if (user_request == d)
{
    // ...
}

// ...

else cout << "Invalid request.";
字符串用户\u字符串;
做{
if(user\u string)cout user\u string;
}while(user_string!=“w”&&user_string!=“d”);

这是一种糟糕的编程实践。请使用Switch Case实现您需要实现的目标。并在每个Case分支后添加一个“break”语句。

这是一种糟糕的编程实践。请使用Switch Case实现您需要实现的目标。并添加一个“break”每个案例分支后的语句。

如果
如下所示,则需要使用
else:

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
}

如果
如下所示,则需要使用
else:

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
}

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
语句来修复。在您的情况下,它看起来像这样:

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

else if (user_request == d)
{
    // ...
}

// ...

else cout << "Invalid request.";
if(用户请求==w)
{
// ...
}
else if(用户请求==d)
{
// ...
}
// ...

else不能
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
语句来修复。在您的情况下,它看起来像这样:

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

else if (user_request == d)
{
    // ...
}

// ...

else cout << "Invalid request.";
if(用户请求==w)
{
// ...
}
else if(用户请求==d)
{
// ...
}
// ...

否则我就不好了,它就是这样格式化的,我不知道为什么它这样格式化是因为你没有缩进你的代码。让标记功能知道某些东西应该被格式化为代码的方法是每行缩进至少4个空格。作为一种快捷方式,你也可以选择整个代码块,然后单击
{
按钮。这样你下次就知道了!我的坏消息是这样格式化的我不知道为什么这样格式化是因为你没有缩进你的代码。让标记功能知道某些东西应该被格式化为代码的方法是每行缩进至少4个空格。作为一种快捷方式,你也可以使用选择整个代码块,然后单击工具栏中的
{}
按钮。这样您下次就可以知道了!虽然为true,但它并没有真正回答他的问题。+1@Maxpm,它确实间接回答了问题:)如果他使用的是
switch
,那么他就不会有这个问题:)如果是真的,它并不能真正回答他的问题。+1@Maxpm,它确实间接地回答了这个问题:)如果他使用的是
switch
,那么他就不会有这个问题:)