【C语言】猜数字小游戏

😂个人主页: 起名字真南
🤣个人专栏:【数据结构初阶】 【C语言】 【C++】

请添加图片描述

目录

  • 1 随机数的生成
    • 1.1 rand
    • 1.2 srand
    • 1.3 time
    • 1.4 设置随机数范围
  • 2 猜数字游戏实现

前言:我们学习完前面的循环以后可以写一个猜数字小游戏

1 随机数的生成

想要完成猜数字游戏,首先要产生随机数,那么怎么生成随机数呢?

1.1 rand

C语言提供了一个rand函数,这是可以随机生成随机数的,函数原型如下

int rand(void

rand函数会生成一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器是32767.
rand函数的使用需要包含<stdlib.h>的头文件

#include<stdio.h>
#include<stdlib.h>int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

结果展示:
在这里插入图片描述
再次调用:
在这里插入图片描述
可以看到调用两次的结果都是一样的,这里就是我们提到的伪随机数,虽然这几个数字都是随机的但是每次运行的结果却都是一样的,如果我们深入了解就会发现rand函数生成随机数是依靠一个种子作为基准值来计算并生成随机数,而之所以运行生成的随机数都是一样的是因为默认情况下默认种子是1。

1.2 srand

C语言中又提供了一个函数叫做srand,用来初始化随机数的生成器,代码如下

void srand (unsigned int seed);

程序中在调用rand函数之前要先调用srand函数,通过srand函数的参数来改变rand函数种子的大小,只要种子在变化那么随机数就会发生变化
代码展示:

#include<stdio.h>
#include<stdlib.h>int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());srand(2);printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

结果展示:
在这里插入图片描述
可以看到将种子改为2就会生成另一组新的伪随机数。但是如果我们一直需要不同的随机数就需要一直改变种子的值,有没有什么办法呢?

1.3 time

在程序中我们一般使用程序运行的时间在作为种子,因为时间一直都在发生变化,在C语言中有一个函数叫做time函数,就可以获得这个时间,time函数原型如下

time_t time(time_t* timer);

time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间的差值,单位是秒,返回类型是time_t(实质上就是32位或64位的整形类型),time函数的参数timer如果是非NULL指针的话,函数也会将这个返回的差值放入到timer指向的内存中。
如果timer是NULL那么将只返回当前程序运行的时间差,也被叫做“时间戳”,time函数使用时需要包含头文件time.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main()
{srand((unsigned)time(NULL));printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

第一次运行结果:
在这里插入图片描述
第二次运行结果:
在这里插入图片描述

1.4 设置随机数范围

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main()
{srand((unsigned)time(NULL));printf("%d", rand() % 100);  //余数的范围是 0~99printf("%d", rand() % 100 + 1);  //余数的范围是 1~100printf("%d", 100 + rand() % 101);  //余数的范围是 100~200return 0;
}

2 猜数字游戏实现

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>void menu()
{//system("cls");printf("***********************\n");printf("******  1. play  ******\n");printf("******  0. exit  ******\n");printf("***********************\n");
}
void game()
{//生成0~100的随机数srand((unsigned int)time(NULL));int x = rand() % 101;int input = 0;int count = 5;while (count){printf("你还有%d次机会\n", count);printf("请输入数字大小>");scanf("%d", &input);if (input < x){printf("猜小了\n");count--;}else if (input > x){printf("猜大了\n");count--;}else{printf("猜对了!!!\n");break;}if (count == 0){printf("游戏结束数字是%d\n", x);}}}
int main()
{int choose = 0;do{menu();printf("请输入>>");scanf("%d", &choose);switch (choose){case 1:game();break;case 0:printf("游戏结束");break;defult:printf("选择错误,请重新选择0/1");break;}} while (choose);return 0;
}

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

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

相关文章

八大排序--07归并排序

假设数组 arr[] {5,7,4,2,0,1,6},请通过插入排序的方式&#xff0c;实现从小到大排列&#xff1a; 方法&#xff1a;先拆分&#xff0c;再合并&#xff0c;并在合并过程中结束临时空间进行排序&#xff1b; 拆分&#xff1a;从待排序列中间位置拆开&#xff0c;数据分成左右两…

使用欧拉安装ceph分布式存储,ceph的集群安装、添加主机集群和删除主机、添加osd硬盘和手动添加硬盘为osd和移除osd。

1.ceph安装 1.1 首先准备3台机子&#xff0c;配置ip&#xff0c;给每台机子添加3块硬盘,设置主机名为ceph01、ceph02、ceph03。 192.168.10.20ceph01192.168.10.21ceph02192.168.10.22ceph03 1.2 三台机子关闭防火墙&#xff0c;setenforce 0&#xff0c;添加hosts解析、配置…

RWKV-7 预览版、大量新论文...RWKV 社区 9 月动态速览

欢迎大家收看《RWKV 社区最新动态》第五期&#xff0c;本期内容收录了 RWKV 社区 2024 年 9 月的最新动态。 9 月动态省流版&#xff08;TL;DR&#xff09; RWKV 官方新闻动态 RWKV-7 发布预览版RWKV-7 论文撰写已面向社区开放RWKV 官网上线 Bad Case 收集页面RWKV 中文文档已…

高带宽示波器在信号测试分析中的优势和主要应用场景

最近&#xff0c;普源精电推出了一款13GHz带宽的示波器DS81304,。有些小伙伴会好奇&#xff0c;为什么普源示波器的带宽会从5GHz跳到13GHz&#xff0c;为什么不是到10GHz或者15GHz呢&#xff1f;13GHz的示波器又能干些什么呢&#xff1f;下面讲为大家介绍&#xff0c;为什么DS8…

基于Arduino的遥控自平衡小车

基于Arduino的遥控自平衡小车 一、项目简介二、所需材料三、理论支持四、外壳设计五、线路连接六、检查MPU6050连接七、烧录库八、PID控制设置九、设置传感器参数十、无线移动控制十一、超声波模块 一、项目简介 一个使用Arduino Nano、MPU-6050以及便宜的6伏直流齿轮电机的自…

HT8513 内置自适应同步升压和防破音功能的6.5W D类及AB类音频功率放大器

1、特征 防削顶失真功能(防破音,Anti-Clipping Function, ACF) 免滤波器数字调制&#xff0c;直接驱动扬声器 输出功率 3W (VBAT3.3V, RL-4Ω, THDN<1%, 20-20kHz full band) 2.0W (VBAT3.3V, RL8Ω,THDN<1%, 20-20kHz full band) 6.5W (VBAT4.2V, RL2Ω, THDN10%,f1kHz…

(Linux驱动学习 - 9).设备树下platform的LED驱动

一.platform相关结构体与函数 1.匹配列表 - struct of_device_id struct of_device_id {char name[32];char type[32];/* compatible 很重要&#xff0c;需要与设备树节点的 compatible 属性一致&#xff0c;才能匹配 */char compatible[128]; const void *data; }; …

IOT-Tree连接西门子PLC S7 200 Smart竟然如此简单

最近一个项目需要把用户现场控制柜接入到云端&#xff0c;控制柜使用西门子PLC Smart 200 SR40型号&#xff0c;已经运行多年&#xff0c;PLC通过以太网接口对接一个触摸屏。 按照我以往的经验&#xff0c;觉得触摸屏以太网接口已经被占用&#xff0c;那么只能通过剩余的RS485…

视频剪辑软件推荐电脑版:这5款剪辑软件不容错过!

在视频剪辑领域&#xff0c;选择合适的软件至关重要。不同的软件各有千秋&#xff0c;有的简单易用&#xff0c;适合新手快速上手&#xff1b;有的功能强大&#xff0c;适合专业团队进行深度编辑。以下是一些电脑版视频剪辑软件的推荐&#xff0c;涵盖了从新手到专业级别的不同…

智能电子价签:助力零售效率升级的关键

在竞争日益激烈的零售市场&#xff0c;如何优化运营、提升效率&#xff0c;是每个零售商都在关注的问题。电子价签作为一项创新技术&#xff0c;提供了蒿效的解决方案。今天&#xff0c;我们就来聊聊电子价签如何帮助零售商轻松管理信息、减少人工误差&#xff0c;并展示它在门…

Electron构建桌面应用程序,服务于项目的自主学习记录(持续更新...

无所畏惧地面对未知&#xff0c;并将其视为成长的机会 大纲官网快速入门1.安装node.js -- 这里推荐用nvm管理2.脚手架创建3.electron 包安装到应用的开发依赖4.创建主进程(main.js)并启动项目1.创建页面2.配置main.js3.启动项目 -- 效果 进阶 -- 基于项目场景功能使用场景一&am…

自动猫砂盆有必要买吗?2024年热门风大的自动猫砂盆测评分享!

自动猫砂盆不知道大家尝试过没&#xff0c;就是可以自动给猫咪铲屎的神器东西&#xff0c;而且它能把那些猫屎都集中收集起来&#xff0c;我们这种上班忙碌的人一回家就能收获一个干干净净的猫砂盆&#xff0c;别提有多快乐了。就算出差都不怕&#xff0c;三四天不回来都只用扔…

红黑树源代码(进阶与细节解释)

目录 对于结点的修改 红黑树模板参数的控制 红黑树结点当中存储的数据 对于insert函数的细节修改 迭代器的代码 迭代器类的添加 迭代器的 迭代器的-- 正向迭代器的代码 红黑树代码全部展示&#xff1a; 看完前两篇的文章&#xff0c;相信对于红黑树有了一定的了解&…

飘香水果购物网站:基于SpringBoot的架构设计

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【C++】模拟实现hash_table(哈希表)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现HashNode类模板 &#x1f38f;构造HashNode类成员变量 &#x1f38f;实现HashNode类构造函数…

家里养有宠物应该用哪款宠物空气净化器比较好?哪款最能吸毛?

这不是国庆节刚过吗&#xff0c;我的小猫终于是平安的度过了在农村生活的时光&#xff0c;之前还担心会不会被爸妈嫌弃&#xff0c;这下好了&#xff0c;嫌弃也过了国庆节。 但是一把猫咪带回出租房&#xff0c;由于几天不在房子里待&#xff0c;猫咪对熟悉的环境又特别激动&a…

视频怎么做成扫码展示?视频二维码在线做的方法

视频想要快速的分享给其他人&#xff0c;选择生成二维码是一种很方便的形式&#xff0c;其他人只需要扫描二维码就可以在线查看视频&#xff0c;与其他分享方式相比更加的简单、方便。现在日常生活中有很多场景都会有视频二维码的应用&#xff0c;简化了获取视频的流程&#xf…

JavaEE: 深入解析HTTP协议的奥秘(3)

文章目录 HTTP认识 "报头"(Header)认识 "状态码"(status code) HTTP JavaEE: 深入解析HTTP协议的奥秘(2) 书接上文~ 认识 “报头”(Header) Header 的整体的格式是"键值对"结构. 每个键值对占一行,键和值之间使用分号分隔. Host 表示服务器主…

【基础篇】一个键值数据库包含什么?

背景 今天&#xff0c;在构造这个简单的键值数据库时&#xff0c;我们只需要关注整体架构和核心模块。这就相当于医学上在正式解剖人体之前&#xff0c;会先解剖一只小白鼠。我们通过剖析这个最简单的键值数据库&#xff0c;来迅速抓住学习和调优 Redis 的关键。 我们把这个简…

STM32外设应用知识详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…