【C语言】猜数字小游戏

news2024/12/29 11:20:16

😂个人主页: 起名字真南
🤣个人专栏:【数据结构初阶】 【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~99
	printf("%d", rand() % 100 + 1);  //余数的范围是 1~100
	printf("%d", 100 + rand() % 101);  //余数的范围是 100~200
	return 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.coloradmin.cn/o/2197013.html

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

相关文章

假鞋检测分割系统源码&数据集分享

假鞋检测分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DiverseBranchBlock&#xff06;yolov8-seg-C2f-SCConv等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAA…

C++11--默认成员函数控制 模板的可变参数

默认成员函数 之前学习C类中&#xff0c;有6个默认成员函数&#xff1a; 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const 取地址重载 最重要的是前4个&#xff0c;默认成员函数就是我们不写编译器会生成一个默认的。在C11中新增了两个函数&#xff1a;移动构造函…

MySQL连接:内连接

先看我的表结构 dept表 emp表 内连接分为两个连接方式 1.隐式内连接 2.显式内连接 1.隐式内连接 基本语法 select 字段列表 FROM 表1, 表2 WHERE 条件... ;例子&#xff1a;查询每一个员工的姓名&#xff0c;及关联的部门的名称&#xff08;隐式内连接实现&#xff09; …

Pikachu-url重定向-不安全的url跳转

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题。 url跳转比较直接的危害是: …

LSTM模型变种

LSTM模型变种 一、GRU 1.什么是GRU GRU&#xff08;Gated Recurrent Unit&#xff09;是一种循环神经网络&#xff08;RNN&#xff09;的变体&#xff0c;它被设计用来解决传统RNN在处理长序列时可能遇到的梯度消失或梯度爆炸问题。GRU通过引入门控机制来控制信息的流动&…

PCL 计算点云的高斯曲率

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 法向量计算 2.1.2 主曲率和高斯曲率计算 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&a…

1000万元试水,看完AI约稿平台上赚钱的故事,真的心动了……

在生成对抗网络&#xff08;GAN&#xff09;、扩散模型&#xff08;Diffusion Models&#xff09;、视觉语言预训练模型&#xff08;CLIP&#xff09;等技术的发展下&#xff0c;AI 绘画可做的内容越来越多。 建筑设计、服装设计、室内设计、插画设计等垂类模型的出现也让更多…

从理论到实践:AI智能分析网关V4烟火检测算法的应用场景探索

在信息化和智能化的今天&#xff0c;AI智能分析网关V4作为一款集成了先进技术的硬件设备&#xff0c;在烟火检测领域展现出了强大的应用价值。本文将详细阐述AI智能分析网关V4烟火检测算法的原理及其在各种场景中的应用。 一、AI智能分析网关V4烟火检测算法原理 深度学习基础…

激光测距用高精度时间测量(TDC)电路MS1003,比 MS1002 具有更高的精度和更小的封装,适合于高精度小封装的应用领域

MS1003 是一款高精度时间测量 (TDC) 电路&#xff0c;对比 MS1002 具 有更高的精度和更小的封装&#xff0c;适合于高精度小封装的应用领域。 MS1003 具有双通道、多脉冲的采样能力、高速 SPI 通讯、 多种测量模式&#xff0c;适合于激光雷达和激光测距。 主要特点 …

word 无法进入修订模式

word 无法进入修订模式&#xff0c;原来是被保护了&#xff0c;取消保护却没有密码 方法&#xff1a; 1、新建-空白文档 2、插入-对象-文件中的文字...&#xff0c;然后选择受保护的文档。这样即可把受保护的文档克隆一份到新文档。新文档当然就可以进入修订模式了。

Mac上最好用的快捷回复工具-快捷短语

网络上打字回复已经成为我们日常生活中不可缺少的一件事了&#xff0c;当有的时候需要一遍又一遍的回复重复的内容的时候&#xff0c;难免会感到疲惫&#xff0c;每次复制粘贴重复的内容&#xff0c;时间一长真的会很让人抓狂。 这里给大家推荐一款很好用的快捷回复工具&#…

全局变量的重复定义会怎样?

有些人的第一反应是编译不过吧&#xff1f; //fun.c void func() {printf("测试1"); }//main.c void func() {printf("测试2"); } void main() {func(); } 编译&#xff1a; 这里可以看到保存错了&#xff0c;因为func重复定义了。 但是重复定义就会全部…

DNSlog注入原理

DNSlog注入 dnslog注入也相当于盲注的一种&#xff0c;但是比盲注效率高一点。 在一定的情况下&#xff0c;如果我们想对一个网站使用布尔或时间盲注&#xff0c;手动注入会对WAF的绕过会非常有帮助&#xff0c;但是效率不高&#xff0c;因此我们往往会使用SQLmap等工具注入&a…

十款主流图纸加密软件推荐|有效防止图纸泄密

在设计和工程行业&#xff0c;保护设计图纸的安全性至关重要。随着信息技术的发展&#xff0c;数据泄密事件频发&#xff0c;选择合适的图纸加密软件成为了企业和个人保护知识产权的重要手段。本文将推荐十款主流的图纸加密软件。 1. Ping32 Ping32是一款专注于图纸和设计文件…

「完美收官」科东软件2024上海国际工博会精彩回顾:鸿道操作系统赋能新型工业化

第24届中国国际工业博览会已经落下帷幕。历经24届&#xff0c;工博会已成为全球工业发展的“风向标”。今年的中国工博会以“工业聚能 新质领航”为主题&#xff0c;工业自动化、数控机床与金属加工、新能源与智能网联汽车、机器人等领域重磅展品悉数亮相&#xff0c;展示了中国…

STM32-TIM输入捕获

一、概述 IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;上升沿或下降沿&#xff09;时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续…

Label Studio 半自动化标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型,也可以根据需要进行扩展和自定义。 1…

厨房用品分割系统源码&数据集分享

厨房用品分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-AFPN-P345等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al ln…

C++欧拉函数

题目一 求欧拉函数 解题思路 分解质因数&#xff1b;代入公式计算即可&#xff08;注意要防止计算出小数是结果不准&#xff09;&#xff1b; 代码实现 #include<iostream> #include<algorithm> #include<cmath>using namespace std;void Euler(int n) {i…

注册安全分析报告:惠农网

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…