C语言rand函数,srand函数,time函数实现随机数,及猜数字小游戏

怀心之所爱,奔赴山河

前言

最近在复习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,可以自己试试写写,然后把代码发给朋友让他挑战一下

感觉有用的话就点个赞支持一下吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2662188.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vue如何实现局部刷新?

应用场景&#xff1a; 比如你要切换tap栏实现刷新下面form表单等&#xff0c;相当于刷新页面。 如何使用如下&#xff1a; <div v-if"isReloadData"> 比如你想刷新那个位置就把 v-if"isReloadData"写到那个标签上 </div> 在data中定义刷新标…

GPT编程(1)八分类图像数据集转换为二分类

一个核心问题就是要将这八类数据图片全部重命名&#xff0c;尝试了一步到位 有一个图像数据集&#xff0c;有八个类别amusement,anger,awe,contentment,disgust, excitement, fear,sadness的图片&#xff0c;每张图片被命名为“类别数字”。采用遍历的方式&#xff0c;按顺序阅…

熊猫目标检测数据集VOC格式1200张

熊猫是中国的国宝&#xff0c;也是世界上最受人喜爱的动物之一。熊猫以其独特的外貌和与生俱来的文化象征意义而闻名于世。它们是一种大型的食草动物&#xff0c;主要分布在中国中部地区的竹林和高山地带。 熊猫的身形圆润笨拙&#xff0c;黑白分明&#xff0c;拥有圆润的脸庞…

VerticalGridView适配触摸屏踩坑,触摸滑动时位置重置/闪烁问题

VerticalGridView是什么? VerticalGridView是安卓leanback库的列表组件,用于支持使用遥控器(按键事件)浏览列表。 它与RecyclerView的继承关系是:VerticalGridView→BaseGridView→RecyclerView 首先我想吐槽一下leanback的BaseGridView相关组件,耦合度较高,并且不允许开…

昇腾910平台安装驱动、固件、CANN toolkit、pytorch

本文使用的昇腾910平台操作系统是openEuler&#xff0c;之前没了解过&#xff0c;不过暂时感觉用起来和centOS差不多。系统架构是ARM&#xff0c;安装包基本都是带aarch64字样&#xff0c;注意和x86_64区别开&#xff0c;别下错了。 安装依赖 cmake 通过yum安装的cmake版本较…

基于YOLOv8的遥感SAR舰船小目标识别

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的遥感SAR舰船小目标&#xff0c;阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的…

软件测试/测试开发丨Python常用数据结构-元组Tuple

元组的定义 元组是有序的、不可变的对象合集&#xff1b;元组使用小括号包围&#xff0c;各个对象之间使用逗号分隔&#xff1b;元组是异构的&#xff0c;可以包含多种数据类型。 元组的创建 方法一&#xff1a;使用逗号分隔方法二&#xff1a;通过小括号填充元素方法三&…

CENTOS docker拉取私服镜像

概述 docker的应用越来越多&#xff0c;安装部署越来越方便&#xff0c;批量自动化的镜像生成和发布都需要docker镜像的拉取。 centos6版本太老&#xff0c;docker的使用过程中问题较多&#xff0c;centos7相对简单容易。 本文档主要介绍centos系统安装docker和拉取docker私…

JavaScript中实现页面跳转的几种常用方法

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在JavaScript中实现页面跳转的几种常用方法以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题…

『JavaScript』全面解析JavaScript中的防抖与节流技术及其应用场景

&#x1f4e3;读完这篇文章里你能收获到 理解防抖&#xff08;Debouncing&#xff09;和节流&#xff08;Throttling&#xff09;的概念&#xff1a;了解这两种性能优化技术如何帮助我们更有效地处理频繁触发的事件掌握防抖与节流的实现方法&#xff1a;学习如何在JavaScript中…

平升电子水库监管平台SQL注入漏洞复现

0x01 产品简介 唐山平升电子水库监管平台通过实时监测、数据分析、预警系统和远程控制等功能&#xff0c;为水库管理部门提供了一种全面、高效的数字化解决方案&#xff0c;帮助他们更好地管理和监控水库&#xff0c;确保水库的安全运行。 0x02 漏洞概述 唐山平升电子水库监…

数字身份验证:跨境电商如何应对账户安全挑战?

在数字化时代&#xff0c;随着跨境电商的蓬勃发展&#xff0c;账户安全问题逐渐成为行业和消费者关注的焦点。随着网络犯罪日益猖獗&#xff0c;用户的数字身份安全面临着更加复杂的威胁。本文将深入探讨数字身份验证在跨境电商中的重要性&#xff0c;并探讨各种创新技术和策略…

MPLS动态协议LDP配置示例

一、预习&#xff1a; MPLS是一种根据报文中携带的标签来转发数据的技术&#xff0c;两台LSR必须在它们之间转的数据 的标签使用上“达成共识”。LSR之间可以运行LDP来告知其他LSR本设备上的标签绑定信息&#xff0c;从而实现标签报文的正确转发。 LSR&#xff1a;Label Switch…

Linux 内核学习笔记: hlist 的理解

前言 最近阅读 Linux 内核时&#xff0c;遇到了 hlist&#xff0c;这个 hlist 用起来像是普通的链表&#xff0c;但是为何使用 hlist&#xff0c;hlist 是怎么工作的&#xff1f; 相关代码 hlist_add_head(&clk->clks_node, &core->clks); /*** clk_core_link_…

Android Context在四大组件及Application中的表现

文章目录 Android Context在四大组件及Application中的表现Context是什么Context源码Activity流程分析Service流程分析BroadcastReceiver流程分析ContentProvider流程分析Application流程分析 Android Context在四大组件及Application中的表现 Context是什么 Context可以理解…

深入ArkUI:深入实战组件text和text input

文章目录 Text组件介绍Text组件的属性方法Text:文本显示组件4.3TextInput组件实战案例:图片宽度控制页面本文总结要点回顾在今天的课程中,我们将深入学习ArkUI提供的基础组件,着重探讨text和text input两个组件。 Text组件介绍 Text组件是一个用于显示文本的组件,其主要作…

跟着LearnOpenGL学习11--材质

文章目录 一、材质二、设置材质三、光的属性四、不同的光源颜色 一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。 比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。 有些物体反…

CEC2017(Python):五种算法(SSA、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、麻雀搜索算法SSA 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defin…

WEB通讯技术。前端实现SSE长连接,nodejs+express搭建简单服务器,进行接口调试,通过curl请求数据

描述 长连接&#xff08;Keep-Alive&#xff09;是一种HTTP/1.1的持久连接技术&#xff0c;它允许客户端和服务器在一次TCP连接上进行多个HTTP请求和响应&#xff0c;而不必为每个请求/响应建立和断开一个新的连接。长连接有助于减少服务器的负载和提高性能。 长连接的HTTP请…

SpringBoot2.7.12整合Knife4j

SpringBoot2.7.12整合Knife4j 是什么 Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案 添加依赖 <!--引入Knife4j的官方start包,该指南选择Spring Boot版本<3.0,开发者需要注意--> <dependency><groupId>com.github.xiaoymin</groupId>&l…