12

我的程序包含的代码应该在我每次执行时生成一个随机正整数。它生成随机数,但只生成一次。之后,当我执行相同的代码时,它给了我相同的值,这使我的代码无用。

我从rand函数开始,然后将srand()函数与time.h头文件一起使用,但仍然无法正常工作。

#define size 10
for(i=0;i<size;i++)
    Arr[i] = rand()%size;

第一次调用(随机):

6 0 2 0 6 7 5 5 8 6

第二次调用(随机但与之前相同):

6 0 2 0 6 7 5 5 8 6

后来我访问了 Stack Overflow 问题并阅读了有关 srand() 函数的信息,并将其用作:

#include<time.h>
for(i=0;i<size;i++)
    Arr[i] = srand(time(NULL));

第一次调用:

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327

第二次调用:

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326

它给了我不同的(但不是随机值)。我已将Arr[i] 定义为 unsigned int,但我仍然得到负值。

4

5 回答 5

41

您需要调用srand() 一次,以随机化种子,然后rand()在循环中调用:

#include <stdlib.h>
#include <time.h>

#define size 10

srand(time(NULL)); // randomize seed

for(i=0;i<size;i++)
    Arr[i] = rand()%size;
于 2013-05-15T15:35:38.010 回答
4

尝试在 rand() 之前调用 randomize() 来初始化随机生成器。

(看:srand()——为什么只调用一次?

于 2013-05-15T15:35:59.427 回答
1

如果您选择srand,那么在使用它之前至少调用一次是个好主意rand(),因为它是一种可怕的原始伪随机生成器。请参阅堆栈溢出问题为什么 rand() % 7 总是返回 0?.

srand(time(NULL));
rand();
//Now use rand()

如果有的话,要么random更好,要么arc4rand更好。

于 2013-05-15T16:05:24.500 回答
-1
#include"stdio.h"
#include"conio.h"
#include"time.h"

void main()
{
  time_t t;
  int i;
  srand(time(&t));

  for(i=1;i<=10;i++)
    printf("%c\t",rand()%10);
  getch();
}
于 2014-09-19T07:58:22.380 回答
-2
#include"stdio.h"//rmv coding for randam number access

#include"conio.h"

#include"time.h"

void main()
{
    time_t t;
    int rmvivek;

    srand(time(&t));
    rmvivek=1;

    while(rmvivek<=5)
    {
        printf("%c\t",rand()%10);
        rmvivek++;
    }
    getch();
}
于 2014-09-19T08:01:30.470 回答