Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言生成随机数_C_Random - Fatal编程技术网

用C语言生成随机数

用C语言生成随机数,c,random,C,Random,我想生成2个介于0和20之间的随机数 int one = rand() % 20; 它给我一个稳定值,即1 我遗漏了什么吗?你必须给随机数加一个种子 srand( time(NULL) ); int num1 = rand() % count; int num2 = rand() % count; 介于1和20之间的随机数 int num = rand() % 20 ; if( num == 0 ) num += 2; else if( num == 1 ) ++n

我想生成2个介于0和20之间的随机数

int one = rand() % 20;
它给我一个稳定值,即1


我遗漏了什么吗?

你必须给随机数加一个种子

srand( time(NULL) );
int num1 = rand() % count;


int num2 = rand() % count;

介于1和20之间的随机数

int num = rand() % 20 ;

if( num == 0 )
    num += 2;

else if( num == 1 )
    ++num ;

你必须给随机数一个种子

srand( time(NULL) );
int num1 = rand() % count;


int num2 = rand() % count;

介于1和20之间的随机数

int num = rand() % 20 ;

if( num == 0 )
    num += 2;

else if( num == 1 )
    ++num ;

如果
count
为1,则会发生这种情况。
如果
count
为非一,则表示您的代码


但是,如前所述,您需要通过调用
srand

来设置非确定性种子,如果
count
为1,则会发生这种情况。
如果
count
为非一,则表示您的代码


但是,如前所述,您需要通过调用
srand

来设置非确定性种子,以生成指定范围[min,max]内的随机数,执行如下操作:

min + (int)((double) rand() / RAND_MAX * (max - min + 1));
方法

min + rand() % (max - min + 1);
可能更快,但它可能不会根据RNG提供值的正态分布


正如其他人所提到的,如果您希望每次运行的顺序不同,请在程序开始时执行一次
srand

要生成指定范围[min,max]内的随机数,请执行以下操作:

min + (int)((double) rand() / RAND_MAX * (max - min + 1));
方法

min + rand() % (max - min + 1);
可能更快,但它可能不会根据RNG提供值的正态分布


正如其他人所提到的,如果您希望每次运行的顺序不同,请在程序开始时执行一次
srand

您的代码运行良好。我想他问的是count的值……你调用了自己的函数
rand()
,而不是C库版本。你的代码运行得很好。我想他问的是count的值……你调用的是自己的函数
rand()
,而不是C库版本。如果我想要1到20之间的随机数呢<代码>如果在调用srand()之前调用了rand(),则生成的序列应与第一次调用srand()时的序列相同,种子值为1。@Mahesh-您不应该在每次调用rand之前为随机数生成器种子。只要一次就可以了(而且更好)。@SLaks:当你需要一个确定的(即可复制的)伪随机数序列时,你可以使用相同的种子。但是当你的程序只打印一个随机数时,你需要一个随机种子。@SLaks-OP说
它给我一个稳定值,即1…
。所以,需要给随机数生成器添加种子。如果我想要1到20之间的随机数呢<代码>如果在调用srand()之前调用了rand(),则生成的序列应与第一次调用srand()时的序列相同,种子值为1。@Mahesh-您不应该在每次调用rand之前为随机数生成器种子。只要一次就可以了(而且更好)。@SLaks:当你需要一个确定的(即可复制的)伪随机数序列时,你可以使用相同的种子。但是当你的程序只打印一个随机数时,你需要一个随机种子。@SLaks-OP说
它给我一个稳定值,即1…
。因此,需要给随机数生成器添加种子。Vinod K可能每次运行程序时都需要不同的随机数。在这种情况下,他肯定应该使用srand为它播种。Vinod K可能希望在每次运行程序时使用不同的随机数。在这种情况下,他肯定应该使用srand来为它播种。