赞
踩
作者:低调
作者宣言:认真写好每一篇博客
作者gitee:link
今天作者又来更新好文了,今天我们就讲计算机时怎么生成随机数字的,并且在设计一个猜数字小游戏,来达到实践的目的,接下来进入正文:
这里我们需要使用到一个函数rand(),这是一个生成随机数的函数,我们来具体看他的用途:
我们可以看到rand函数是一个无参的,返回int整型数据。他需要的头文件是<stdlib.h>,让我们来看一下代码和运行截图
#include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
int main()
{
while (1)//循环时为了看到多次随机生成的数
{
int ret = rand();//生成随机数,用ret来接收
printf("%d\n", ret);
Sleep(1000);//这是一个睡眠函数,单位时毫秒
}
return 0;
大家可以看到生成的数是随机的了,但是这里有一个问题,作者没办法把录屏放到博客上,所以看不到直观现象,读者可以把这段代码复制在自己的编译器上运行几篇可以发现,每次生成随机数的结果是一致的,那这样随机数不久不随机了??并且生成的随机数只在0-RAND_MAX之间
大家可以看到RAND_MAX是一个32767的数。那我们怎末解决这个问题呢,其实在使用这个函数之前,我们再来看看rand这个函数使用还需要哪些条件
画红线的地方提示我们,在使用之前需要一个srand()函数,那我们再来看看srand()怎么使用的吧:
我们看到返回值是空类型,所以没有返回值,参数是一个无符号整型unsigned int,为什么在使用rand之前之前,要使用这个函数呢,因为这个函数是用来设置随机数生成器的。那我们来看代码理解一下。
看这两次运行结果,虽然结果不一样了,但还是有问题,如果srand里面的参数不变,他每次生成的随机数还是和上次一样,如果多次运行程序,那生成的就不是随机数了,所以我们需要使srand里面的参数随机就行了,我们需要生成随机数啊,为什么参数还需要随机数啊,这不就矛盾了吗,不要慌,我们这个时候就要引入时间戳这个概念。
只有时间是一直在改变的,我们就要用到time这个函数,他的返回值就是返回一个时间戳的值
这里的参数是一个指针类型,我们目前在使用这个之前只需要传一个NULL就好了。我们只需要知道怎么使用就好了,不需要过多的研究他。
来看代码:
#include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
int main()
{
srand((unsigned int)time(NULL));
while (1)//循环时为了看到多次随机生成的数
{
int ret = rand();//生成随机数,用ret来接收
printf("%d\n", ret);
Sleep(1000);//这是一个睡眠函数,单位时毫秒
}
return 0;
}
这是两次运行的截图,大家看到,结果不一样了,你不管运行几次,生成的随机数都是不一样的,这样是不是就很好的解决这个问题了。
注意:我们在使用rand函数之前的srand只需要调用一次,如果把srand函数放到循环里面就会出现问题
这些数字好像又不是随机的,因为每次调用,srand里面的参数重新改变,并且时间是一点一点往上涨,也就相当于每次都重新设置起点,达不到随机的效果。
我们需要在1-100之前猜数字
先来看代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> void menu() { printf("**********************************\n"); printf("*********** 1.play **********\n"); printf("*********** 0.exit **********\n"); printf("**********************************\n"); } //RAND_MAX--rand函数能返回随机数的最大值。 void game() { int random_num = rand() % 100 + 1; int input = 0; while (1) { printf("请输入猜的数字>:"); scanf("%d", &input); if (input > random_num) { printf("猜大了\n"); } else if (input < random_num) { printf("猜小了\n"); } else { printf("恭喜你,猜对了\n"); break; } } } int main() { int input = 0; srand((unsigned)time(NULL)); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("选择错误,请重新输入!\n"); break; } } while (input); return 0; }
我们在game()函数里面看到while循环是你猜的数,我们千万不能把rand函数放在while里面不然每次猜的时候都生成一个随机数,这样永远都猜不到,rand%100+1是因为余数最多为99在加以就是100了,srand函数在一次程序运行时只需要调用一次就好了,所以放在一开始就好了。
读者可以自己下去玩玩这个小游戏。
今天我们学会如何生成了一个随机数,并且还实现了一个猜数字的小游戏,我们知道了每个函数都有特定的功能,并且也了解他的重要性,如果读者有什么不懂的问题可以随时评论,我会及时答疑,如果有写的不对的地方,也希望大佬指出来,作者会及时改正。最后希望大家多多支持我
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。