C - 随机数发生器问题

时间:2016-11-26 14:42:38

标签: c pointers random numbers generator

生成随机数并将值赋给指针时出现问题。

我想在这里做什么:生成1到1000之间的数字,玩家将获得该金额。 基本金显然是0。 虽然,出于某种原因,当我打印出整数金的数量时,有时它超过3000,这显然是错误的迹象。

黄金交易部分是因为玩家将多次收到黄金,我希望它每次都能运作。虽然目前,因为我正在测试我的程序的这一部分,所以玩家只收到一次金币。

由于我是初学程序员,我想我做错了。 我该如何正确地执行此操作,以便整数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 个答案:

答案 0 :(得分:3)

您将变量声明为指针:

int* gold=0;
int* goldchange;

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

int gold=0;
int goldchange;

答案 1 :(得分:2)

John Coleman提到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);