Последние несколько часов я изучаю 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++.
За несколько часов работы с базовым опытом программирования вам, вероятно, даже не стоит возиться с функциями, кроме main
. Не торопитесь, изучите поток управления, и тогда вы сможете заняться процедурным программированием.
Какую книгу вы бы порекомендовали, у меня ее нет, но я ищу что-то, что охватывает все основы --> средний/продвинутый уровень, не будучи слишком тупым, так как я могу очень быстро схватывать вещи
См. ссылку в комментарии Куимби для кураторского списка книг, которые широко признаны хорошими.
@Liamvvvv Тогда вам может подойти экскурсия по C++, вы всегда можете поискать в Интернете конкретные вещи.
Вы можете передать переменную 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
может быть лучше. Если вы хотите сделать игру в своем примере, имея инвентарь и магазин, классы будут умнее.
ВНИМАНИЕ: это, скорее всего, выше вашего уровня. Изменяйте и используйте код с осторожностью.
Вы можете использовать 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
.
Охватывает ли ваша книга C++ аргументы функций?