random或rand函数打印相同的值,即使在不同的机器中也是如此

时间:2011-04-27 06:23:40

标签: c random

我想打印1到6范围内的随机数。我有以下代码。

printf("The random value is %d \n",random(6));

每次运行代码时都会打印1804289383。即使在不同的机器上。我也试过rand(6)仍然输出相同。即使我删除了6,输出也没有改变。请建议如何解决它

先谢谢

SANKET

3 个答案:

答案 0 :(得分:5)

srand()之前应该rand()每次都要生成新号码。此代码将显示如何:

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

int main()
{
    srand(time(0));
    printf("The random value is %d\n", 1 + rand() % 6);
    return 0;
}

答案 1 :(得分:2)

首先,random()不接受任何争论。

其次,来自fine manual

  

rand()一样, random()默认情况下会产生一系列数字,这些数字可以通过调用 srandom()来复制1作为种子。

因此,除非您通过调用srandom()明确指定种子,否则random()每次都会产生相同的值序列。

第三,random()返回long,因此您应该在%ld来电中使用printf()

第四,了解编译器的警告标志,将它们全部打开,并注意它们的输出。一旦理解为什么安全,就可以关闭一些警告标志。

答案 2 :(得分:1)

  

srand()函数将其参数设置为rand()返回的新的伪随机整数序列的种子。通过使用相同的种子值调用srand(),可以重复这些序列。

     

如果未提供种子值,则rand()函数将自动播种,值为1.

所以这是一个简单的例子:

#include <stdio.h>
#include <stdlib.h>

#define RSEED 2

int main (int argc, char *argv[]) {
  srand(RSEED);
  printf("The random value is %d\n", rand());
  return 0;
}