c/c++语言开发共享在C中设置间隔生成随机数

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

int diceroll_1; diceroll_1=(rand()%3)+1; printf("%dn",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("%dn",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));

      以上就是c/c++开发分享在C中设置间隔生成随机数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560147.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐