Reputation: 91
I have an issue while generating a random number and giving the value to a pointer.
What I want to do here: generate a number between 1 and 1000, and the player will receive that amount of gold. The base gold is 0 obviously. Although, for some reason, when I printf the amount of integer gold, there were cases when it was more than 3000, which is obviously a sign of error.
The goldchange part is because the player will receive gold lots of times and I want it to work every time. Although at the moment, since I am testing this part of my program, the player receives gold only once.
Since I am a beginner programmer, I guess I am doing it wrong. How should I do this correctly so integer GOLD will have the correct value?
int* gold=0;
int* goldchange;
srand(time(0));
goldchange=gold;
gold=gold+rand()%1000+1;
goldchange=gold-goldchange;
printf("You have received the following amount of gold: %d", goldchange);
printf("You have this many golds: %d", gold);
So, for example, this was what happened last time: You have received the following amount of gold: 777 You have this many golds: 3108
But it should be 777 not 3108.... (obviously every run gives different numbers, but the two values are never the same...)
Upvotes: 2
Views: 128
Reputation: 1947
As John Coleman mentioned gold
is a pointer and you need to allocate memory for it.
int* gold=0;
int* goldchange = 0;
gold = malloc(sizeof(int));
if(0 == gold)
return;//Handle this case in your application.
goldchange = malloc(sizeof(int));
if(0 == goldchange)
return;//Handle this case in your application.
srand(time(0));
*goldchange = *gold;
*gold = *gold + rand()%1000+1;
*goldchange = *gold - *goldchange;
printf("You have received the following amount of gold: %d", *goldchange);
printf("You have this many golds: %d", *gold);
Upvotes: 2
Reputation: 51998
You are declaring to variables as pointers with:
int* gold=0;
int* goldchange;
And then proceeding to treat these as regular int
variables. In the given code I see no reason for declaring these variables as pointers. Why not just
int gold=0;
int goldchange;
Upvotes: 3