Переменная всегда сбрасывается в значение по умолчанию в функциях - PullRequest
0 голосов
/ 26 сентября 2018

Я создаю программу для банкоматов, где вы можете пополнять и снимать баланс с использованием функций.Сначала я заметил, что после первого депозита он работает нормально, но после второго использования депозита он не добавляет его к текущему балансу, а к балансу до него.

Например:
(1-я попытка)
* Баланс = 1000
* Я вносю 500
* Остаток теперь = 1500

(2-я попытка)
* Я зачисляю 700
* Баланс теперь 1700

Вместо того, чтобы сделать это 2200 , он сбрасывается обратно до 1000 , прежде чем отправился для моей второй попытки, в результатев результате 1700 .Может кто-нибудь объяснить, что пошло не так в коде?Я готов не только получить правильный код, но и узнать, как это было сделано.

Это для моего обучения c ++.

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int deposit(int x, int y)
{
    int newbal = x + y;
    return newbal;
}

int withdraw(int x, int y)
{
    int newbal = x - y;
    return newbal;
}
int main()
{
    int menu;
    int selection;
    double x = 1000, y;
    int trans;
    char user[20], pass[20], pktc[3];
    string newuser, newpass;

    do{
    system ("CLS");
    cout << "Welcome To Bank" << endl;
    cout << "[1] Register" << endl;
    cout << "[2] Login" << endl;
    cout << "[3] Exit" << endl;
    cout << "\n\nEnter command: " <<endl;
    cin >> menu;
    switch(menu)
    {

//----------------------------------------------------------------CASE 1------------------------------------------------------------------------------//
//----------------------------------------------------------------REGISTER----------------------------------------------------------------------------//

        case 1:
        system ("CLS");
        cout << "<-------REGISTER------->\n\n";
        cout << "Enter Name: ";
        cin >> user;
        newuser = user;
        cout << "Enter Password: ";
        cin >> pass;
        newpass = pass;
        cout <<"REGISTERED SUCCESSFULLY!" << endl;
        cout <<"\n\nPress Any key to contniue" << endl;
        cin >> pktc;
        system ("CLS");

        break;

//------------------------------------------------------------END OF REGISTER--------------------------------------------------------------------------//   



//----------------------------------------------------------------CASE 2------------------------------------------------------------------------------//
//-----------------------------------------------------------------LOGIN------------------------------------------------------------------------------//

        case 2:
        system ("CLS");
        cout << "<-------LOGIN------->\n\n";
        cout << "Enter Username: ";
        cin >> newuser;
        cout << "Enter Password: ";
        cin >> newpass;
        if(newuser != user || newpass != pass)
        {

//-------------------------------------------------------------FAILED LOGIN----------------------------------------------------------------------------//

            cout << "\nInvalid account" << endl;
            cout <<"\n\nPress Any key to contniue" << endl;
            cin >> pktc;
            system ("CLS");
        }
        else if (newuser == user || newpass == pass)
        {

//----------------------------------------------------------------CASE 2.1------------------------------------------------------------------------------//
//------------------------------------------------------------SUCCESFULL LOGIN--------------------------------------------------------------------------//

        system ("CLS");
        cout << "\n\n<-------------------------------WELCOME------------------------------->\n\n" << endl;
        cout<<"\nWelcome To Banco De Nelio";
        cout<<"\nUSERNAME:  "<< user << endl;
        cout<<"\n\n TIP ATM MACHINE";
        cout<<"\n   1. Balance";
        cout<<"\n   2. Deposit";
        cout<<"\n   3. Withdraw";
        cout<<"\n   4. Exit";

do{

cout<<"\n\nChoose Transaction[1-3]:";
cin>>trans;

switch(trans)
    {

//----------------------------------------------------------------ATM CASE 1------------------------------------------------------------------------------//
//--------------------------------------------------------------CHECK BALANCE--------------------------------------------------------------------------//

        case 1:
        system ("CLS");
        cout << "\n\n<-------------------------------WELCOME------------------------------->\n\n" << endl;
        cout<<"\nWelcome To Banco De Nelio";
        cout<<"\nUSERNAME:  "<< user << endl;
        cout<<"\n\n TIP ATM MACHINE";
        cout<<"\n   1. Balance";
        cout<<"\n   2. Deposit";
        cout<<"\n   3. Withdraw";
        cout<<"\n   4. Exit";
        cout<<"\n\nYour total balance is: "<< deposit(x, y) ;
        break;

//----------------------------------------------------------------ATM CASE 2------------------------------------------------------------------------------//
//--------------------------------------------------------------BEFORE DEPOSIT--------------------------------------------------------------------------//

        case 2:
        system ("CLS");
        cout << "\n\n<-------------------------------WELCOME------------------------------->\n\n" << endl;
        cout<<"\nWelcome To Banco De Nelio";
        cout<<"\nUSERNAME:  "<< user << endl;
        cout<<"\n\n TIP ATM MACHINE";
        cout<<"\n   1. Balance";
        cout<<"\n   2. Deposit";
        cout<<"\n   3. Withdraw";
        cout<<"\n   4. Exit";
        cout<<"\n\nEnter the amount:" ; 
        cin>>y;

//--------------------------------------------------------------AFTER DEPOSIT--------------------------------------------------------------------------//

        system ("CLS");
        cout << "\n\n<-------------------------------WELCOME------------------------------->\n\n" << endl;
        cout<<"\nWelcome To Banco De Nelio";
        cout<<"\nUSERNAME:  "<< user << endl;
        cout<<"\n\n TIP ATM MACHINE";
        cout<<"\n   1. Balance";
        cout<<"\n   2. Deposit";
        cout<<"\n   3. Withdraw";
        cout<<"\n   4. Exit";
        cout<<"\n\nYour total balance now is: " << deposit(x, y) <<endl;
        break;

//----------------------------------------------------------------ATM CASE 3------------------------------------------------------------------------------//
//--------------------------------------------------------------WITHDRAW BALANCE--------------------------------------------------------------------------//

        case 3:
        cout<<"\nEnter the amount:" ;
        cin>>y;
        if ( y > x)
        {
            cout<<"\nYou cannot withdraw " << y;
            cout<<" because the amount is higher than your balance" << endl;
            break;
        }
        else
            x = x - y;
            cout<<"\nYour Total Balance is now " << withdraw(x, y) << endl;
            break;

//----------------------------------------------------------------ATM CASE 4------------------------------------------------------------------------------//
//-------------------------------------------------------------------BACK--------------------------------------------------------------------------------//

        case 4:
            cout<<"\n\nThank You!" << endl;
            break;
        default:
            cout<<"\nYou did not enter any valid number" << endl;
            break;
        }
    }while (trans<=3);
        }
        break;

//----------------------------------------------------------------CASE 3------------------------------------------------------------------------------//
//-----------------------------------------------------------------EXIT-------------------------------------------------------------------------------//

        case 3:
        system ("CLS");
        cout << "Thank you for using me!\n";
        return 0;
//-------------------------------------------------------------END OF EXIT----------------------------------------------------------------------------//
    }

}while (menu<=3);
}

Я не уверен, что проблема здесьэто функция или конфликт в операторе switch.Заранее спасибо

РЕДАКТИРОВАТЬ Пожалуйста, зарегистрируйтесь:)

1 Ответ

0 голосов
/ 26 сентября 2018

Действительно трудно определить важные части, но в основном ваша проблема может быть сведена к чему-то вроде

int add(int x,int y) { return a+b; }
int sub(int x,int y) { return a-b; }

int main() {
    int initial = 0;
    // add 10 then subtract 5
    std::cout << add(initial,10) << '\n';  // prints 10
    std::cout << sub(initial,5) << '\n';   // prints -5
}

Когда то, что вы действительно хотите, это что-то вроде

int main() { 
    int initial = 0;
    // add 10 then subtract 5 and update initial
    initial = add(initial,10);
    std::cout << initial << '\n';
    initial = sub(initial,5); 
    std::cout << initial << '\n';
}

ВашМетоды правильно вычисляют новую сумму, но когда вы вызываете эти методы, вы игнорируете возвращаемое значение, когда вместо этого вы хотите обновить некоторую переменную.

Некоторые другие предложения (в случайном порядке):

  • использовать значимые имена.x и y не передают никакого смысла, сравните int deposit(int current_balance, int amount) с int deposit(int x,int y)
  • используйте функции, чтобы разбить ваш код на более мелкие части (например, было бы неплохо разделить ввод, вывод илогика).Всякий раз, когда вы пишете комментарий, описывающий, что делает блок кода, этот блок кода является хорошим кандидатом для функции, которая получает правильное имя вместо комментария
  • не используйте std::endl, когда вы хотитечтобы завершить строку (std::endl завершает строку и сбрасывает поток, что в большинстве случаев не то, что вам нужно), используйте \n вместо
  • не используйте using namespace std;,Это не принесет большого вреда в вашем текущем коде, но прочитайте здесь , почему вы никогда не должны делать это в заголовке, и лучше не привыкать к вредным привычкам с самого начала.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...