2016-11-26 96 views
2

我在生成一个随机数并给该指针赋值时遇到了问题。C - 用随机数发生器发出

我想在这里做什么:生成一个介于1和1000之间的数字,玩家将获得金额。 明显的基础黄金为0。 尽管由于某些原因,当我印刷整数金的数量时,有些情况超过了3000,这显然是错误的表现。

goldchange部分是因为玩家会收到很多次黄金,我希望它每次都能工作。尽管目前,由于我正在测试我的程序的这部分内容,玩家只能收到一次黄金。

由于我是初学者程序员,我想我做错了。 我应该如何正确地做到这一点,所以整数GOLD将具有正确的值?

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); 

因此,举例来说,这是发生了什么最后一次: 您收到的金数额如下:777 你有这么多的金牌:3108

但它应该是777不是3108。 ... (显然每次运行提供了不同的数字,但两个值是绝不相同...)

+2

'gold'是一个指针,所以'gold = gold + rand()%1000 + 1;'没有任何意义。似乎没有理由宣布“黄金”作为指针。也许只是用'int gold = 0'替换'int * gold = 0'。 –

+0

@JohnColeman我现在觉得很蠢。谢谢。我不知道为什么我想把它当做指针。我将goldchange和gold从指针改为一个正常的整数,现在它可以工作。谢谢。 – Noxter

回答

3

您声明变量与指针:

int* gold=0; 
int* goldchange; 

然后继续将这些视为常规int变量。在给定的代码中,我没有理由将这些变量声明为指针。为什么不

int gold=0; 
int goldchange; 
+0

这是问题所在。谢谢!我会尽快接受这个答案! – Noxter

2

正如约翰·科尔曼提到gold是一个指针,你需要为它分配内存。

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); 
+0

如果你不需要指针,你可以使用由John Coleman给出的解决方案 。 – MayurK

+1

对于OP需要变量作为其他用途的指针(未在发布的代码中显示)的情况,这是一个很好的答案,所以+1 –