怀心之所爱,奔赴山河
前言
最近在复习c的知识,想起之前写过一个猜数字小游戏,所以今天就把自己关于随机数的使用经验分享一下,希望对大家有帮助。
一.rand函数
1.函数的声明如下
可以看到,返回值是int类型,不需要传参,需要调用头文件<stdlib.h>
他会产生一个伪随机数,我们暂将其成为a,a大于等于0且小于等于RADN_MAX
(在大多数编译器下他是32767)。
2.举例
int a=rand()%100;
则a的值是0到99,那我们怎么得到1到100呢?
方法:int a=rand()%100+1;
二srand函数
我们发现,在使用rand()函数时每次运行代码随机值都不变,为什么呢,
我们去搜搜他的相关信息就会发现这一句话
翻译:rand函数返回在0到RAND_MAX范围内的伪随机整数。在调用rand之前,请使用srand函数对伪随机数生成器进行种子初始化。
这里提到了一个名词“种子”,你可以把它理解为创建随机数的基准,不同的种子对应不同的随机数组,默认种子为1,因此我们想实现随机数就要用到不同的种子,那就要用srand函数了
函数定义:
ok可以发现,函数没有返回值,传参类型是unsigned int,头文件是<stdlib.h>
调用它可以为rand设置一个种子,即你传的参数。
3.time函数
为了使种子一直变化我们要引入时间戳了。
时间戳是当前时间与1970年1月1日0时0分0秒的差值,单位是秒,
time函数的声明如下:
time_t time(time* p);
time_t是32位或64位下的整形
若传入的指针不是空指针则返回值会被存入,若是空指针则函数只返回值,这个值就是时间戳。
综上,我们就可以写出随机数了
srand((unsigned int)time(NULL));int a = rand() % 100;
猜数字游戏:
为了让它更像游戏,我们可以给他做个菜单,并用函数封装一下
void menu()
{printf("###########################\n");printf("########## 开始游戏 ########\n");printf("###########################\n");
}
接着创建变量,使用随机数
int count = 10;int C = count;srand((unsigned int)time(NULL));int a = rand() % 100;
int b;
我们规定她输入的数比那个随机数大了,我们就说猜大了
比随机数小就说猜小了
在她成功猜出后告诉他猜了几次猜出来的
在做个小小的惩罚机制,如果超过10次则电脑关机
这里要用到关机指令
system("shutdown -s -t 5");
代码如下
menu();printf("你要猜的数大于等于0小于100\n");int n;while (1){scanf("%d", &n);if (n == a) {count--;printf("好好好,用了%d次猜对了\n", C - count);count = 5;goto again;}else if (n > a) {count--;if (!count){printf("你的电脑会在5秒后关机\n");system("shutdown -s -t 5");}printf("猜大了,小黑子!就剩%d次了\n", count);}else{count--;if (!count){printf("你的电脑会在5秒后关机\n");system("shutdown -s -t 5");}printf("猜小了,行不行啊小趴菜!就剩%d次了\n", count);}}
最后,让用户选择是继续玩还是停止
用if else即可
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void menu()
{printf("###########################\n");printf("########## 开始游戏 ########\n");printf("###########################\n");
}
int main()
{int count = 10;int C = count;srand((unsigned int)time(NULL));int a = rand() % 100;
int b;
again:printf("玩游戏输入1 不玩输入0\n");scanf("%d", &b);if (b == 1){menu();printf("你要猜的数大于等于0小于100\n");int n;while (1){scanf("%d", &n);if (n == a) {count--;printf("好好好,用了%d次猜对了\n", C - count);count = 5;goto again;}else if (n > a) {count--;if (!count){printf("你的电脑会在5秒后关机\n");system("shutdown -s -t 5");}printf("猜大了,小黑子!就剩%d次了\n", count);}else{count--;if (!count){printf("你的电脑会在5秒后关机\n");system("shutdown -s -t 5");}printf("猜小了,行不行啊小趴菜!就剩%d次了\n", count);}}}else if (b == 0){printf("哥哥这莫好玩的的游戏居然不玩,我emo了\n");return 0;}elseprintf("你故意输错是吧,呵男人\n");goto again;
}
ok,可以自己试试写写,然后把代码发给朋友让他挑战一下
感觉有用的话就点个赞支持一下吧