1

私は C++ で銀行プログラムを作成しようとしていました。このプログラムでは、ウォレットと銀行口座の金額を表示し、お金を預け入れたり引き出したりすることができます。実行しようとすると入力できますが、何かを入力すると、Money in Wallet: 20スタックオーバーフローが発生するまで何度も何度も繰り返されます。これは皮肉なことだと思い、これを Stack Overflow という Web サイトに投稿しました。

これまでの私のコードは次のとおりです。

#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();
}

助けてください!

4

2 に答える 2

6

あなたのコードには複数の問題があります。

まず、関数prompt()内で関数を呼び出しているため、スタックオーバーフローが発生するまで何度も何度も自分自身を呼び出します。

次に、入力をブール内に保存します。あなたはおそらく使用するつもりでしたstd::string

第 3 に、if ステートメント内では、値が等しいかどうかをチェックするのではなく、=演算子を使用するときに値を設定します。2 つの値が等しいかどうかを確認するには、==符号を使用します。

第 4 に、ifステートメントの使い方が間違っています。複数の条件の値をチェックする場合は、すべての条件をif else相互に続けて配置する必要があります。あなたがしているのは、それらを複数の if ステートメントにスピアリングし、それぞれが表示される else 条件に続くことですUnknown Command.]

これは宿題のように見えるので、学習の機会を与えるために完全なコードは提供しません。しかし、上記の点を修正すれば、機能するプログラムを手に入れることができます。

于 2014-01-04T00:30:01.473 に答える