Я не могу получить доступ к значению моей переменной, хотя я прошел его через область видимости - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу начать с того, что я новичок в C ++.Я изучал веб-сайты и часами пытался перебирать код и пробовал что-то новое, пытаясь решить эту проблему.

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

#include <iostream>

//void Loop(int Total, int Spend);
//int NewTotal(int Total, int Spend);
//void Spent(int Total, int Spend);
void UserInput(int Total, int Spend);

// Loops back to UserInput() for next entry input
void Loop(int Total, int Spend)
{
    UserInput(Total, Spend);
}

int NewTotal(int Total, int Spend)
{
    std::cout << "Output of Total is: " << Total << std::endl;
    std::cout << "Output of Spend is: " << Spend << std::endl;
    return Total + Spend;
}

void Expense()
{
    std::cout << "Please enter a description of your expense!" << std::endl;
    char ExpenseDesc;
    std::cin >> ExpenseDesc;
    std::cout << "You described your expense as: " << std::endl;
    std::cout << ExpenseDesc << std::endl;
}

void Spent(int Total, int Spend)
{
    std::cout << "Please enter the amount you spent!" << std::endl;
    std::cin >> Spend;
    NewTotal(Total, Spend);
}

void UserInput(int Total, int Spend)
{
    Expense();
    Spent(Total, Spend);
    std::cout << "Result of Total and Spend (NewTotal) is: " << Total + Spend << std::endl;
    std::cout << "Record saved!" << std::endl;
    std::cout << "So far, you have spent " << NewTotal(Total, Spend) << "!" << std::endl; //int Total & int Spend not retaining value when NewTotal(Total, Spend) gets called again to return value
    std::cout << "Ready for next entry!" << std::endl;
    Loop(Total, Spend);
}

int main()
{
    int Total;
    int Spend; 
    Spend = 0;
    Total = 0;
    UserInput(Total, Spend);
    return 0;
}

По сути, это очень простой запрос, который запрашивает описание транзакции (которая принимает только один символ, мне нужно это исправить) и сумму транзакции.,После завершения этой записи вы можете сделать еще одну, и программа должна добавить старую итоговую сумму к новой итоговой сумме, чтобы получить итоговые расходы, а затем повторить запрос.

Ответы [ 2 ]

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

Другой вариант - передать указатели:

void f(int* Total, int* Spent)
{
    *Total = ...;
    *Spent = ...;
}

Или используйте std :: tuple:

std::tuple<int, int> f(int Total, int Spent)
{
    ...
    return std::tuple<int, int>(Total, Spent);
}
0 голосов
/ 10 сентября 2018

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

Возвращаемые значения:

std::pair<int, int> Spent(int Total, int Spend) {
    ...
    return std::make_pair(Total, Spend);
}

// Getting values out
std::pair<int, int> result = Spent(Total, Spend);
int newTotal = result.first;
int newSpend = result.second;
// or
int newTotal, newSpend;
std::tie(newTotal, newSpend) = Spent(Total, Spend);
// or (C++17)
auto [newTotal, newSpend] = Spent(Total, Spend);

Справочные параметры:

void Spent(int& Total, int& Spend) {
    // Modifications to Total and Spend in this function will apply to the originals, not copies
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...