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

C random或rand函数打印相同的值,即使在不同的机器中也是如此,c,random,C,Random,我想打印一个范围为1到6的随机数。我有以下代码 printf("The random value is %d \n",random(6)); 每次我运行代码时,它都会打印1804289383。甚至在不同的机器上。我还尝试了兰德(6)仍然输出相同。即使我删除了6,输出也不会改变。请建议如何修复它 提前谢谢 Sanket您应该在rand()之前使用srand(),以便每次生成新的数字。此代码将显示如何执行此操作: # include <time.h> # include <std

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

printf("The random value is %d \n",random(6));
每次我运行代码时,它都会打印1804289383。甚至在不同的机器上。我还尝试了兰德(6)仍然输出相同。即使我删除了6,输出也不会改变。请建议如何修复它

提前谢谢

Sanket

您应该在
rand()
之前使用
srand()
,以便每次生成新的数字。此代码将显示如何执行此操作:

# 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;
}
#包括
#包括
#内因库德
int main()
{
srand(时间(0));
printf(“随机值为%d\n”,1+rand()%6);
返回0;
}
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;
}
#包括
#包括
#定义RSEED 2
int main(int argc,char*argv[]){
srand(RSEED);
printf(“随机值为%d\n”,rand());
返回0;
}
首先,
random()
不接受任何参数

第二,从以下方面:

与rand()类似,random()在默认情况下会生成一个数字序列,可以通过调用srandom()以1作为种子进行复制

因此,除非通过调用
srandom()
明确指定种子,
random()
每次都将生成相同的值序列

第三,
random()


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

在你第一次调用
random()
之前,你是在调用
random()
吗?@Joel,你指的是srand()?@mdec吗我相信
randomize()
在内部调用
srand(…)
,以时间为种子。但这可能不符合ISO标准。我是根据过去的经验来评论的。@Joel,有没有一个标准的库函数叫做
randomize()
?我很快看了一眼,但如果错过了,我很抱歉。@Joel,没问题,我只是想知道为什么找不到文档:)并确保在主函数中只使用srand一次!任何可能同时启动多个进程,但希望每个进程都看到不同于
rand()
的序列的人,可能需要生成更可能是唯一的。。。e、 g.
srand(时间(0)^(getpid()>2))。更好的是,用它来代替。