怀心之所爱,奔赴山河
最近在复习c的知识,想起之前写过一个猜数字小游戏,所以今天就把自己关于随机数的使用经验分享一下,希望对大家有帮助。
可以看到,返回值是int类型,不需要传参,需要调用头文件<stdlib.h>
他会产生一个伪随机数,我们暂将其成为a,a大于等于0且小于等于RADN_MAX
(在大多数编译器下他是32767)。
2.举例
int?a=rand()%100;
则a的值是0到99,那我们怎么得到1到100呢?
方法:int a=rand()%100+1;
我们发现,在使用rand()函数时每次运行代码随机值都不变,为什么呢,
我们去搜搜他的相关信息就会发现这一句话
翻译:rand函数返回在0到RAND_MAX范围内的伪随机整数。在调用rand之前,请使用srand函数对伪随机数生成器进行种子初始化。
这里提到了一个名词“种子”,你可以把它理解为创建随机数的基准,不同的种子对应不同的随机数组,默认种子为1,因此我们想实现随机数就要用到不同的种子,那就要用srand函数了
函数定义:
ok可以发现,函数没有返回值,传参类型是unsigned?int,头文件是<stdlib.h>
调用它可以为rand设置一个种子,即你传的参数。
为了使种子一直变化我们要引入时间戳了。
时间戳是当前时间与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;
}
else
printf("你故意输错是吧,呵男人\n");
goto again;
}
ok,可以自己试试写写,然后把代码发给朋友让他挑战一下
感觉有用的话就点个赞支持一下吧