在C中设置间隔生成随机数

我知道python,在设定的时间间隔内创建一个随机数是如此简单,但是在C中它似乎有点复杂。 通过查看有关堆栈溢出的其他问题,这就是我所拥有的。

int diceroll_1; diceroll_1=(rand()%3)+1; printf("%d\n",diceroll_1); 

问题是它每次给我3个。 我希望每次编译和运行程序时它都不同。 我希望它从1到3随机。 我的理解是,这可能会保存它,这就是为什么它每次产生3而不是我想要的。 如何每次生成一个随机数而不是相同的数字?

你有种子吗? 如果没有,请尝试这样:

 #include  #include  #include  int main(void) { srand(time(NULL)); // only once // roll the dice int diceroll_1; diceroll_1=(rand()%3)+1; printf("%d\n",diceroll_1); return 0; } 

输出:

 Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 3 Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 1 

PS:

rand()产生伪随机数,就像我们的教授。 在IP坚持! 它需要播种,否则会一次又一次地给出相同的数字,因为从参考中我们得到了:

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

rand函数的工作原理是生成先前生成的随机数,对其执行一些置换,然后返回。 如果它是第一次调用rand ,它将获取随机数生成序列的种子值并置换它。

请记住,计算机基本上是确定性的机器,硬件/ CPU指令级别并不存在“随机性”,除非像TRNG这样的新奇设备。

像Python这样的高级语言可能会隐藏这一点,并在后台自动将随机数生成播放到系统时间,但C不会。 在调用rand之前,需要使用种子值调用srand

现在,用srand(3);类的参数调用srand srand(3);srand(100); 将产生彼此不同的随机数,它们每次都是相同的序列。 如果您想为种子提供真正独特的值,请尝试使用当前系统时间:

srand((unsigned)time(NULL));