Trying to create a buy/sell program

I've decided to write a program as an exercise to understand switches. Since I'm going into programming to design games, I thought I would have fun and try to create a basic shop program. The only problem I'm having is the communication from the buy "menu" to the sell "menu". The amount of money and the level upgrades don't seem to be moving from my sell "menu" to my buy "menu" with complete accuracy. Any help on this is appreciated.

EDIT:
It seems that I have an error in my code to return from the sell "menu" to the buy "menu". I'll fix that when I get a chance and put the updated code on this post. Sorry for that.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//------------------------------------------------------------------------------
// Upgrade Menu Program
//------------------------------------------------------------------------------

#include <iostream>

using namespace std;

int sellItem(int money, int axUpgrade, int swordUpgrade, int shieldUpgrade);

int main()
{
    int money = 100;
    
    cout << "     ^.^      Welcome to the Upgrade Store.     ^.^" << endl << endl;
    cout << "What is it that you would like?" << endl << endl;
    cout << "1. Ax Upgrade: 40 Money" << endl << "2. Sword Upgrade: 20 Money" << endl;
    cout << "3. Shield Upgrade: 20 Money" << endl << "4. Sell" << endl << "5. Exit" << endl << endl;
    
    int choice;
    int axUpgrade = 1;
    int swordUpgrade = 1;
    int shieldUpgrade = 1;
    
    cin >> choice;
    cout << endl;
    
    while (choice != 5)
    {
    switch (choice)
    {
    case 1:
           if (money >= 40)
                {
                money = money - 40;
                axUpgrade++;
                cout << "Your Ax level is now: " << axUpgrade << endl;
                cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
                cout << "1. Ax Upgrade: 40 Money" << endl << "2. Sword Upgrade: 20 Money" << endl;
                cout << "3. Shield Upgrade: 20 Money" << endl << "4. Sell" << endl << "5. Exit" << endl << endl;
                cin >> choice;
                }
           else
                {
                cout << "Sorry, but you don't have enough money." << endl;
                cin >> choice;
                }
           break;
    case 2:
           if (money >= 20)
                {
                money = money - 20;
                swordUpgrade++;
                cout << "Your Sword level is now: " << swordUpgrade << endl;
                cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
                cout << "1. Ax Upgrade: 40 Money" << endl << "2. Sword Upgrade: 20 Money" << endl;
                cout << "3. Shield Upgrade: 20 Money" << endl << "4. Sell" << endl << "5. Exit" << endl << endl;
                cin >> choice;
                }
           else
                {
                cout << "Sorry, but you don't have enough money." << endl;
                cin >> choice;
                }
           break;
    case 3:
           if (money >= 20)
                {
                money = money - 20;
                shieldUpgrade++;
                cout << "Your Shield level is now: " << shieldUpgrade << endl;
                cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
                cout << "1. Ax Upgrade: 40 Money" << endl << "2. Sword Upgrade: 20 Money" << endl;
                cout << "3. Shield Upgrade: 20 Money" << endl << "4. Sell" << endl << "5. Exit" << endl << endl;
                cin >> choice;
                }
           else
                {
                cout << "Sorry, but you don't have enough money." << endl;
                cin >> choice;
                }
           break;
    case 4:
           sellItem(money, axUpgrade, swordUpgrade, shieldUpgrade);
                cout << "1. Ax Upgrade: 40 Money" << endl << "2. Sword Upgrade: 20 Money" << endl;
                cout << "3. Shield Upgrade: 20 Money" << endl << "4. Sell" << endl << "5. Exit" << endl << endl;
           cin >> choice;
           break;
    default:
            cout << "I'm sorry. I didn't get that." << endl;
            cin >> choice;
    }
    };
    
    cout << "Alright. See ya around.";
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

int sellItem(int money, int axUpgrade, int swordUpgrade, int shieldUpgrade)
{
    cout << "Alright, what do ya have?" << endl << endl;
    cout << "1. Ax Upgrade: 30 Money" << endl << "2. Sword Upgrade: 10 Money" << endl;
    cout << "3. Shield Upgrade: 10 Money" << endl << "4. Return" << endl << endl;
    
    int choice;
    cin >> choice;
    cout << endl;
    
   while (choice != 4)
   {
   switch (choice)
   {
   case 1:
          if (axUpgrade > 1)
               {
               money = money + 30;
               axUpgrade--;
               cout << "Your Ax level is now: " << axUpgrade << endl;
               cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
               cout << "1. Ax Upgrade: 30 Money" << endl << "2. Sword Upgrade: 10 Money" << endl;
               cout << "3. Shield Upgrade: 10 Money" << endl << "4. Return" << endl << endl;
               cin >> choice;
               }
          else
               {
               cout << "Hmmm, it doesn't look like you have an upgrade of this to sell.";
               cin >> choice;
               }
          break;
   case 2:
          if (swordUpgrade > 1)
               {
               money = money + 10;
               swordUpgrade--;
               cout << "Your Sword level is now: " << swordUpgrade << endl;
               cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
               cout << "1. Ax Upgrade: 30 Money" << endl << "2. Sword Upgrade: 10 Money" << endl;
               cout << "3. Shield Upgrade: 10 Money" << endl << "4. Return" << endl << endl;
               cin >> choice;
               }
          else
               {
               cout << "Hmmm, it doesn't look like you have an upgrade of this to sell.";
               cin >> choice;
               }
          break;
   case 3:
          if (shieldUpgrade > 1)
               {
               money = money + 30;
               shieldUpgrade--;
               cout << "Your Shield level is now: " << shieldUpgrade << endl;
               cout << "You now have " << money << " dollars." << endl << endl << "Anything else?" << endl << endl;
               cout << "1. Ax Upgrade: 30 Money" << endl << "2. Sword Upgrade: 10 Money" << endl;
               cout << "3. Shield Upgrade: 10 Money" << endl << "4. Return" << endl << endl;
               cin >> choice;
               }
          else
               {
               cout << "Hmmm, it doesn't look like you have an upgrade of this to sell.";
               cin >> choice;
               }
          break;
   default:
           cout << "I'm sorry. I didn't get that." << endl;
           cin >> choice;
   }
   }
   return money, axUpgrade, swordUpgrade, shieldUpgrade;
}
Last edited on
When you call a function all the parameters are copies of the original ones that you passed in and those copies are destroyed when the functions returns.

In order to pass in your original variables rather than a copy you need to use a reference &

 
int sellItem(int& money, int& axUpgrade, int& swordUpgrade, int& shieldUpgrade)
This won't do what you think:

return money, axUpgrade, swordUpgrade, shieldUpgrade;

I would make the function void and return nothing. Just make your parameters references as I showed above.
Galik,

Thank you for pointing that out. I knew it would be something simple and now it works perfectly. I have used the reference operator before in my school work, but now that I'm doing something at my leisure I can take more in and actually remember I used it.

Also, I have

    system("PAUSE");
    return EXIT_SUCCESS;


at the end, but I was wondering how would I go about have the computer wait about 5 sec. or so and then close the window? I haven't covered that in my classwork but I'm interested in knowing how that would work.
Last edited on
Using system() is strongly discouraged. If you want to wait for a key press you can use:

 
std::cin.get(); // wait to read a char from the input buffer 


If you want to make a timed delay then you could use time() from #include <ctime>

1
2
3
4
5
6
7
8
9
#include <ctime>

int main()
{
	time_t begin = time(0);
	while(time(0) - begin < 5); // 5 seconds

	return 0;
}


But that's not very efficient on the CPU. There are non-standard ways of doing it more efficiently. On unix you can use sleep() function. I don't know what Windows would use.
Windows uses Sleep() (with a captial S).
Okay. Thanks for all the help.
Topic archived. No new replies allowed.