【问题标题】:C++ Bank program not working stack overflowC ++银行程序不工作堆栈溢出
【发布时间】:2014-01-21 19:17:36
【问题描述】:

我试图用 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();
}

请帮忙!

【问题讨论】:

  • 为什么世界上的每一位教授都分配他的 CS 101 学生设计一家银行?我希望这不是我的银行后端​​的制作方式。
  • 如果你用调试器单步调试它,你会在大约 30 秒内找到它。
  • 您可能正在无限循环或无限递归调用函数。您为什么不尝试使用调试器单步执行它以找出问题所在?
  • 用双等号 (==) 而非单等号 (=) 来测试相等性。
  • 为变量和方法使用更好的名称。例如,“account”对于账户余额来说是一个非常糟糕的名称,bank() 对于打印账户余额的方法来说是一个非常糟糕的名称。为什么存款()会被“你没有足够的钱!”拒绝?

标签: c++ stack-overflow bank


【解决方案1】:

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

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

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

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

第四,您对if 语句的使用是错误的。如果您要检查多个条件的值,则应将它们全部放在 if else 中,所有条件都彼此跟随。您正在做的是将它们分成多个 if 语句,每个语句都遵循打印 Unknown Command.]

的 else 条件

看这看起来像作业,我不会给你完整的代码给你一个学习的机会。但是,如果您解决了以上几点,那么您将走上拥有功能程序的道路。

【讨论】:

    【解决方案2】:

    你的结构需要更像这样

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

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2011-03-02
      • 2014-01-17
      • 1970-01-01
      • 2015-09-08
      • 2013-12-12
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多