2014-01-04 3 views
1

Я пытался создать банковскую программу на C++, где вы можете просмотреть сумму денег в кошельке и на своем банковском счете, а также внести и снять деньги. когда я пытаюсь запустить его, он позволяет мне вводить, но когда я вводил что-либо, он повторяет Money in Wallet: 20 снова и снова, пока не получаю переполнение стека, которое, как я думал, было довольно ироничным, размещая его на веб-сайте Stack Overflow.C++ Bank program не работает переполнение стека

Это мой код до сих пор:

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

Пожалуйста, помогите!

+3

почему каждый профессор в мире назначать своих студентов CS 101 разработать банк? Я надеюсь, что это не так, как был создан бэкэнд моего банка. –

+1

Если вы сделали шаг с отладчиком, вы найдете его примерно через 30 секунд. – Rob

+0

Возможно, вы либо чередовали бесконечно, либо рекурсивно вызывали функцию бесконечно. Почему бы вам не попробовать пройти через него с помощью отладчика, чтобы узнать, где проблема? – derpface

ответ

6

Я вижу несколько проблем с вашим кодом.

Во-первых, вы вызываете функцию prompt() внутри функции, вызывающей ее recursively call ее снова и снова, пока у вас не будет stackoverflow.

Во-вторых, вы храните свой вход внутри bool. Вы, вероятно, хотели использовать std::string

В-третьих, внутри вашего оператора if вы не проверяете, равно ли это значение, но установите его, когда вы используете оператор =. Если вы хотите проверить, равны ли эти два значения, используйте знак ==.

В-четвертых, использование вами заявления if неверно. Если вы проверяете значение для нескольких условий, вы должны поместить их все внутри if else, все следуя друг за другом. Что вы делаете, это рассказывать о них в нескольких случаях, если каждое из них соответствует другому состоянию, которое печатает Unknown Command.]

Увидев, как это выглядит домашнее задание, я не дам вам полный код, чтобы дать вам возможность учиться. Но если вы исправите вышеприведенные баллы, вы будете на пути к функциональной программе.

0

Ваша структура должна быть больше, как этот

while(true) 
{ 
    prompt(); 
    if(command == "quit") 
    break; 
    else if(command == "bank") 
    bank(); 
    else if(.....) 
.... 
    else 
    cout << "bad command" 
} 
Смежные вопросы