生成随机数函数

生成随机数函数前几天,写了一个猜数字的游戏,游戏开始在系统内部先生成一个随机数字,然后不断的去猜数字,和这个数字进行比较。在我看来这个游戏最关键的核心语句就是生成随机数的语句,在写了这个程序之后,我对随机数又有了新的认识,今天我就来跟大家说一下,我自己对随机数的一些新认识。  这是学过c语言的常用的生成随机数的语句,输入之后发现,rand划了波浪线,是因为,这个函数需要的头文件,你并没有写出来。#inc

大家好,欢迎来到IT知识分享网。

 前几天,写了一个猜数字的游戏,游戏开始在系统内部先生成一个随机数字,然后不断的去猜数字,和这个数字进行比较。在我看来这个游戏最关键的核心语句就是生成随机数的语句,在写了这个程序之后,我对随机数又有了新的认识,今天我就来跟大家说一下,我自己对随机数的一些新认识。

  生成随机数函数

这是学过c语言的常用的生成随机数的语句,输入之后发现,rand划了波浪线,是因为,这个函数需要的头文件,你并没有写出来。#include<stdlib.h>,写上之后就没有问题了。

 生成随机数函数

 为了方便给大家截屏我有加了getchar()语句,大家看这是生成的一个随机数字,生成之后输出结果是41

 生成随机数函数

生成随机数函数

生成随机数函数

之后我有对整个程序各个地方做了大大小小的更改,发现,无论你改了什么到最后你的rand这个随机函数所生成的数字永远是41,甚至我已经将vs关掉重新打开这个程序,发现生成的还是41

  那问题来了,不是说rand的作用是生成一个随机数么,为什么他这么多次一直生成41

  因为,实际rand这个函数生成的数,其实是一个伪随机数,他并不是真正意义上的随机。rand函数在调用的时候,他会需要srand这个函数给他一个种子,他会通过得到的这个种子来生成一个随机数字,如果你程序在调用rand之前并没有调用srand函数,那么程序会自动给你调用srand函数,然后获得一个种子,从而rand通过这个种子来获得随机数字,然而当你程序调用过一次srand后系统就不再会给你调用这个函数,你的种子也就不会在有所更改,所以rand一直在通过第一次获得的种子来计算你的随机值,所以你的随机值无论怎么样的出来都和第一次的相同。

  如果这样的话,你的游戏就变成了一次性的游戏,每次都是那个数字,他还有什么存在的意义,那怎么才能获得一个真正的随机数呢?

  所以就有了srand((unsigned int)time(NULL));srand函数,由你来每次调用这个函数,这样每次调用他给rand的种子都不一样,那你的rand获得的随机数每次也都不一样了。

int num = 0;

int n = 0;

srand((unsigned int)time(NULL));

num = rand() % 100 + 1;

printf(“请猜一个1-100之间的数字\n”);

scanf(“%d”, &n);

while (n != num)

{

 

 

if (n > num)

{

printf(“猜大了,请重新输入\n”);

}

if (n < num)

{

printf(“猜小了,请重新输入\n”);

}

scanf(“%d”, &n);

}

printf(“猜测正确\n”);

  这是我写的猜数字游戏的游戏部分,核心语句。srand((unsigned int)time(NULL));到底系统怎么样每次才能获得不一样的一个变量呢?很多人自然就想到了时间,时间是永远不会存在两个相同的时间,所以根据你的系统时间来生成一个随机数是最好不过的了。这里time实际上也是一个c语言的函数,它是用来获得时间的函数,

 生成随机数函数

这是c++对time函数的一个定义,他不能直接使用这个函数的返回值,必须依赖于其他元素来调用这个对象,变成一个可移植的类型,所以,这里实际上是srand函数调用了time函数time函数返回给了一个srand值,然后srand通过这个值来生成一个种子,正因为time一直在变化,时间一直在变化,他获得的值就不同,有人问,那我今天的早上八点整和明天的早上八点整同时运行这个程序生成的随机数字一样吗?不一样,这个的时间,指的是从1970年1月1日0点0分0秒开始到你调用函数这一刻的时间,他是一直在变化的。unsigned int)time(NULL)这句话的意思就是将time得到的值转化为一个unsigned int型,我尝试了改为int型之后程序也可以正常运行,unsigned的意思就是没有符号,这里将time的值转换成了一个没有符号的整型,我感觉应该1970年以后得到的数字都是正数吧,除非你的系统时间设定为了1970年之后就要加unsigned了吧,明天有时间准备尝试一下这个事情,如果有结果了我会及时说出来的。

  所以,大家如果以后要是想要生成一个随机数字,那在每次调用rand之前都一定要记着手动调用一下srand函数,变量要是时间这样的话才会最大程度的保证你每次生成的都是一个不相同的随机数字。

  还有就是,如果大家要写这个srand函数的话,因为你调用了time函数所以大家一定要记着加上time函数的头文件#include<time.h>。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22717.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信