Управление переменными между функциями

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

Редактировать: у меня есть промежуточные знания Python из школы, но я полностью забыл об этом. Я в основном прошу переподготовку, а не учебники. Как только мне напомнят, я буду готов. Извините за путаницу.

int shop() {
    int selection;
    cout << "This is the shop!" << endl;
    cout << "What would you like to browse?: " << endl;
    cin >> selection;
    switch (selection) {
        case1: {
            int selection;
            cout << "Farmer Market!\n1) Seeds (T1)\n2) Seeds (T2)\n3) Seeds (T3)\n4) Tools (T1)\n5) Tools (T2)\n6) Tools (T3)" << endl;
            cout << "What would you like to buy?: ";
            switch (selection) {
                case 1: {
                    items = 1; ///THIS IS THE PART I NEED HELP WITH
                }
            }
        }
    }
}

int inventory() {
    int items;
    int tools;
    return items, tools;

Как я могу позволить пользователю купить семена в функции shop(), а затем присвоить значение 1 переменной items в функции inventory() без необходимости назначать глобальную переменную? Мне нужно, чтобы items сохранял свою ценность до конца игры.

Охватывает ли ваша книга C++ аргументы функций?

Stephen Newell 10.12.2020 21:37

Возможно, вы захотите прочитать хорошую книгу по C++.

Quimby 10.12.2020 21:37

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

Silvio Mayolo 10.12.2020 21:39

Какую книгу вы бы порекомендовали, у меня ее нет, но я ищу что-то, что охватывает все основы --> средний/продвинутый уровень, не будучи слишком тупым, так как я могу очень быстро схватывать вещи

Liamvvvv 10.12.2020 21:43

См. ссылку в комментарии Куимби для кураторского списка книг, которые широко признаны хорошими.

user4581301 10.12.2020 21:48

@Liamvvvv Тогда вам может подойти экскурсия по C++, вы всегда можете поискать в Интернете конкретные вещи.

Quimby 10.12.2020 21:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете передать переменную item по ссылке.

int shop(int& itemsRef) {
   //Do calculations like itemsRef = 1
}

int inventory() {
   int items;
   shop(items);
}

Передача чего-либо по ссылке просто означает, что программа не будет копировать значение items в новую переменную, которую затем использует функция. ItemsRef wird ein Verweis auf die Переменные предметы в инвентаре. itemsRef становится ссылкой на переменную items в inventory. Затем переменная itmesRef обрабатывается точно так же, как items. Преимущество этого в том, что вам не нужно возвращать возвращаемое значение, поэтому вам не нужно возвращать itemsRef. Вот еще немного информации: learncpp Этот сайт также является отличным ресурсом для изучения C++.

@Liamvvvv Рад, что смог помочь, но если вы действительно используете переменную items и tools снова и снова, class может быть лучше. Если вы хотите сделать игру в своем примере, имея инвентарь и магазин, классы будут умнее.

Hydrated Dragon 10.12.2020 22:28
Ответ принят как подходящий

ВНИМАНИЕ: это, скорее всего, выше вашего уровня. Изменяйте и используйте код с осторожностью.

Вы можете использовать class для этого. Например,

class ShopInventory{
  public:
    int items;
    int tools;
    ShopInventory(){
      items=0;
      tools=0;
    }
    ~ShopInventory(){}
}inventory;

int shop(){
  int selection;
  cout << "What would you like to buy?\n\t(1) seeds\n\t(2) hammer";
  cin >> selection;
  switch(selection){
    case 1:
      inventory.items++;
      cout << "You have bought seeds";
    case 2:
      inventory.tools++;
      cout << "You have bought a hammer";
  }
}

class хранит ваше количество items и tools. Вы можете создать его, вызвав конструктор ShopInventory() или добавив его в конец определения класса (}inventory,inventory2;). Если вы хотите, чтобы это не было в глобальной области видимости, вы можете переместить определение class в функцию shop().

Вы можете получить количество предметов с помощью inventory.items и инструментов с помощью inventory.tools. Вы также можете редактировать их, как если бы они были обычными переменными:

inventory.items += 10; // bought 10 items
inventory.tools += 3; // bought 3 tools

Вы также можете расширить это, добавив больше в class.

Другие вопросы по теме