【问题标题】:C - Issue with random number generatorC - 随机数生成器问题
【发布时间】:2017-04-10 17:04:08
【问题描述】:

我在生成随机数并将值赋给指针时遇到问题。

我想在这里做的:生成一个介于 1 到 1000 之间的数字,玩家将获得该数量的金币。 基础金明显为0。 虽然由于某种原因,当我 printf 整数金的数量时,有超过 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.... (显然每次运行都会给出不同的数字,但是这两个值永远不会相同......)

【问题讨论】:

  • gold 是一个指针,所以 gold=gold+rand()%1000+1; 没有意义。似乎没有任何理由将 gold 声明为指针。也许只需将int* gold = 0 替换为int gold = 0
  • @JohnColeman 我现在感觉很愚蠢。谢谢你。我不知道为什么我想把它作为一个指针。我将 goldchange 和 gold 从指针更改为普通整数,现在它可以工作了。谢谢。

标签: c pointers random numbers generator


【解决方案1】:

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

【讨论】:

  • 如果不需要指针,可以使用 John Coleman 给出的解决方案。
  • 当 OP 需要将变量作为指针用于其他目的(未在发布的代码中显示)的情况下,这是一个很好的答案,所以 +1
【解决方案2】:

您将变量声明为指针:

int* gold=0;
int* goldchange;

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

int gold=0;
int goldchange;

【讨论】:

  • 这就是问题所在。谢谢!我会尽快接受这个答案!
猜你喜欢
  • 2013-10-21
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2011-01-24
相关资源
最近更新 更多