C ++ Bank程序无法正常堆栈溢出

时间:2014-01-04 00:26:04

标签: c++ stack-overflow bank

我正在尝试使用C ++制作银行程序,您可以在其中查看钱包,银行帐户中的金额以及存款和取款。当我尝试运行它时,它让我输入,但当我输入任何内容时,它会一次又一次地重复Money in Wallet: 20直到我得到堆栈溢出,我认为这有点讽刺,在一个名为Stack Overflow。

到目前为止,这是我的代码:

#include <iostream>
using namespace std;

float money= 20.00;
float account=100.00;
float amount;
bool cmd;

void wallet()
{
    cout<<"Money in Wallet: "<<money<<endl;
}


void bank()
{
    cout<<"Money in Bank: "<<account<<endl;
}


void deposit()
{
    cout<<"How much do you want to deposit?: ";
    cin>>amount;
    if (money>=amount)
    {
        account = account+amount;
        money = money-amount;
    }
    else
    {
        cout<<"You don't have enough money!\n";
    }
}


void withdraw()
{
    cout<<"How much do you want to withdraw?: ";
    cin>>amount;
    if(account>=amount)
    {
        money = money+amount;
        account = account-amount;
    }
    else
    {
        cout<<"There isn't enough money in your bank account!\n";
    }
}


void prompt()
{
    cmd="null";
    cout<<">";
    cin>>cmd;
    if (cmd="wallet")
    {
        wallet();
        cmd="null";
        prompt();
    }
    else{
        cout<<"Unknown Command.";
        cmd="null";
        prompt();
    }
    if (cmd="bank")
    {
        bank();
    }
    else{cout<<"Unknown Command.";}
    if (cmd="deposit")
    {
        deposit();
    }
    else{cout<<"Unknown Command.";}
    if (cmd="withdraw")
    {
        withdraw();
    }
    else{cout<<"Unknown Command.";}
}


int main()
{
    prompt();
}

请帮忙!

2 个答案:

答案 0 :(得分:6)

我可以看到您的代码存在多个问题。

首先,您在函数内部调用函数prompt(),使其recursively call一遍又一遍地自我调整,直到您拥有stackoverflow

其次,将输入存储在bool中。您可能打算使用std::string

第三,在if语句中,您不检查值是否相等,而是在使用=运算符时进行设置。如果要检查两个值是否相等,请使用==符号。

第四,您使用if语句是错误的。如果要检查多个条件的值,则应将它们全部放在if else内,并将它们全部放在一起。你正在做的是将它们分成多个if语句,每个语句都遵循打印Unknown Command.]的其他条件

看到这看起来如何看作业,我不会给你完整的代码,让你有机会学习。但是如果你确定了上面的要点,那么你就可以开始使用功能性程序了。

答案 1 :(得分:0)

你的结构需要更像这样

while(true)
{
  prompt();
  if(command == "quit")
     break;
  else if(command == "bank")
    bank();
  else if(.....)
....
  else
    cout << "bad command"
}