【C++】while 循环应用案例 - 猜数字游戏

news2024/11/25 6:52:58

目录

1、缘起

2、案例描述

3、代码

4、相关知识点

4.1、rand() 函数

4.2、srand() 函数

5、总结 


1、缘起

        猜数字游戏是一种简单而又有趣的游戏,在这个游戏中,计算机会生成一个随机数字,玩家需要通过不断猜测来猜出这个数字。在本篇博客中,我们将使用 C++ 编程语言中的 while 循环 来实现一个简单的猜数字游戏,并介绍如何优化代码以提高游戏的体验。

2、案例描述

系统随机生成一个 1 到 100 之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并退出游戏。

游戏的逻辑流程图如下:

3、代码

main.c++

#include <iostream>
#include "game.h"
 
using namespace std;

int main()
{
	//定义一个变量,进行游戏的进行和退出的选择
	int input = 0;

	do
	{
		menu();
		cout << "请选择>: " << endl;
		cin >> input;
		cout << "\n" << endl;

		switch (input)
		{
			case 1:
				cout << "欢迎来到猜数字游戏\n祝您旅途愉快!!\n" << endl;
				game(); //猜数字游戏
				break;
			case 0:
				cout << "您已退出游戏 !" << endl;
				break;
		}
	} while (input);


	system("pause");
	return 0;
}	

game.c++ 

#include "game.h"


void menu()
{
	cout << "**********************" << endl;
	cout << "*** 1.Play  0.Exit ***" << endl;
	cout << "**********************" << endl;
}

void game()
{
	short count = 5;

	//添加随机数种子,作用利用当前系统时间生成随机数,防止每次随机数都一样
	srand((unsigned int)time(NULL));

	//1、系统生成随机数
	int num = rand() % 100 + 1; //rand()%100 生成 0~99 的随机数

	//2、玩家进行猜测
	int val = 0;  //玩家输入的数字

	while (1)
	{
		cout << "请猜数字:>" << endl;
		cin >> val;
		cout << "\n" << endl;

		//5 次机会用完自动退出游戏
		count--;
		//cout << count << endl;

		if (val > num)
		{
			cout << "猜大了!" << endl;
			cout << "您剩余的次数:" << count << endl;
			cout << "\n" << endl;
		}
		if (val < num)
		{
			cout << "猜小了!" << endl;
			cout << "您剩余的次数:" << count << endl;
			cout << "\n" << endl;
		}
		if (val == num)
		{
			cout << "恭喜你,猜对了!!" << endl;
			break;
		}
		if (0 == count)
		{
			cout << "对不起,您的次数已经用完,请充值!!" << endl;
			cout << "\n" << endl;
			break;
		}
	}
}

game.h 

#pragma once

#include<iostream>
using namespace std;

//函数的声明
void menu();
void game();

4、相关知识点

4.1、rand() 函数

        rand() 函数 用来产生随机数,需要的头文件是:<stdlib.h> 。但是,rand() 的内部是用 线性同余法 实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。rand() 函数会返回一个范围在 0 ~ RAND_MAX (32767) 之间的伪随机数(整数)。其中 RAND_MAX 是由 编译器 定义的常量,表示生成的最大随机数。

int rand(void);

        在调用 rand() 函数之前,可以使用 srand() 函数设置 随机数种子,如果没有设置随机数种子,rand() 函数在调用时,自动设计随机数种子为 1 。随机数种子相同,每次产生的随机数也会相同。

例如,使用 rand() 函数产生 1 ~ 100 以内的随机整数

        如果要生成 特定范围内 的随机数,可以使用 模运算。例如,要生成介于 1 和 100 之间的随机数,可以使用以下代码: 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    // 设置种子为当前系统时间
    srand((unsigned int)time(NULL));
 
    for (int i = 0; i < 3; i++)
    {
        // 生成随机数
        int num = rand()% 100 + 1;

        printf("随机数是:%d\n", num);
    }
   
    system("pause");
    return 0;
}

 

关键代码解释:

         rand() % 100,可以产生 0 ~ 99 之间的数字,rand() % 100 + 1 就可以产生 1 ~ 100 之间的数字,依次类推 !

4.2、srand() 函数

        srand() 函数 需要的头文件是:<stdlib.h>。srand() 函数用来设置 rand() 函数产生随机数时的随机数种子。

void srand(unsigned int seed);

        其中,seed 是一个整数值,用来作为随机数生成器的种子。种子决定了随机数序列的起始值,因此不同的种子会生成不同的随机数序列。

        在使用 rand 函数生成随机数之前,通常需要调用 srand 函数设置种子。可以使用 时间函数 time() 获取 当前系统时间 作为种子,以保证每次程序运行时生成的随机数序列都是不同的。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    // 设置种子为当前系统时间
    srand((unsigned int)time(NULL));
 
    for (int i = 0; i < 3; i++)
    {
        // 生成随机数
        int num = rand();

        printf("随机数是:%d\n", num);
    }
   
    system("pause");
    return 0;
}

 

注意,每次运行程序时生成的随机数序列都是不同的,因为每次的种子都是不同的。

5、总结 

        通过 C++ 中的 while循环,你可以轻松地创建一个有趣的猜数字游戏。玩家需要在给定的尝试次数内猜出正确的数字,每次猜测后程序会给出提示,让玩家更快地接近答案。这个小游戏可以帮助玩家提高逻辑思维和数学能力,同时也是一个有趣的时间消磨方式。

        本期的分享总结就到这里了,如果有疑问的小伙伴,我们在评论区交流嗷,笔者必回,我们下期再见啦 !

         

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

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

相关文章

使用docker搭建lnmp环境+redis服务

lnmp搭建过程&#xff0c;前文已经写了传送门&#xff0c;本文主要写一下运行redis容器和php-fpm容器内安装redis扩展 redis 1.创建宿主机配置和数据文件夹 [rootlocalhost ~] mkdir -p /lnmp/redis/{data,conf}2.放置/lnmp/redis/conf/redis.conf文件 点我下载 3.启动容器 …

k8s+kubeedge+sedna安装全套流程+避坑指南+解决办法

最近在学习边缘计算要用到kubeedge&#xff0c;安装了好多次总会遇到各种各样的问题&#xff0c;因此在这里一一列出&#xff0c;以方便下次安装。则里面可能出错的地方太多&#xff0c;如果有问题&#xff0c;请私信联系。 一、环境准备 节点IP环境软件云端节点172.23.70.23…

Python|矿产卫片Excel经纬度坐标数据转换为shp点数据——OGR库实现

1.实验需求 基于Excel表格里面的经纬度坐标数据,自动生成点shp矢量文件,并添加属性信息。 2.编程思路详解 ①使用Pandas库读取原始矿产图斑列表表格; xlsx_path = uC:\\Users\\YaoJun\\Desktop\\矿产图斑列表.xlsx #sheet_name默认为0,即读取第一个sheet的数据 df = pd.…

TPM管理工作应该如何开展?

在制造行业&#xff0c;Total Productive Maintenance&#xff08;TPM&#xff09;管理被广泛认为是提高生产效率和设备可靠性的有效方式。然而&#xff0c;实施TPM管理需要深入的专业知识和经验。本文将探讨如何开展TPM管理工作&#xff0c;以确保制造企业的生产效率和设备可靠…

2023-Python实现烯牛数据采集

文章目录&#x1f449;1、目标网址&#x1f449;2、接口分析&#x1f449;3、代码实现【JS 逆向百例】 1/100 学习记录&#xff1a;哈喽~ 前面我们接触了一些JS逆向的数据获取&#xff0c;如果前面的百度&#xff0c;有道翻译和正方教务系统的登录加密你已掌握&#xff0c;说明…

计组2.4——加法器的设计

计组&#xff1a;2.4算术逻辑单元异或门实现奇偶校验的原理串行加法器&&并行加法器并行加法器的优化算术逻辑单元 控制信号&#xff1a; 当M0时表示算术运算 当M1时表示逻辑运算 S0~ S3表示做什么运算&#xff0c;因此ALU可以表示16种算数运算和16种逻辑运算 Ai,Bi代表…

PL-VINS线特征处理部分源码阅读

PL-VINS线特征处理部分源码阅读1 linefeature_tracker2 三角化单目三角化双目三角化3 后端优化线特征状态量重投影误差本文主要阅读PL-VINS中引入线特征的代码实现&#xff0c;包括线特征表示方法&#xff08;Plcker参数化方法、正交表示法&#xff09;、前端线特征提取与匹配、…

遥感、GIS及GPS在土壤空间数据分析、适应性评价、制图及土壤普查中的应用

摸清我国当前土壤质量与完善土壤类型&#xff0c;可以为守住耕地红线、保护生态环境、优化农业生产布局、推进农业高质量发展奠定坚实基础&#xff0c;为此&#xff0c;2022年初国务院印发了《关于开展第三次全国土壤普查的通知》&#xff0c;决定自2022年起开展第三次全国土壤…

微信支付,JSAPI支付,APP支付,H5支付,Native支付,小程序支付功能详情以及回调处理

一.支付相关文档地址支付wiki&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml支付api: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/index.shtml开发工具包(SDK)下载&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtm…

靶机精讲之CTF4

主机发现 靶机193 端口扫描 服务扫描 80&#xff0c;25&#xff08;明确版本&#xff09;攻击面更大 web渗透 blog是交互式的程序 发现index可进行手动爆破&#xff08;地址包含&#xff09; http://192.168.10.193/index.html?page../../../../../../../../etc/passwd 无发…

雨水情测报系统+智慧水库大坝安全监测系统

解决方案 雨水情测报系统智慧水库大坝安全监测系统&#xff0c;系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成&#xff0c;同时建立规范、统一的监测平台&#xff0c;集数据传输、信息共享、数据储存于…

Git简单使用~下载、安装、命令行使用、IDEA使用

文章目录一、Git下载二、Git安装三、命令行操作四、IDEA使用gitee4. 查看Gitee仓库一、Git下载 官网下载地址&#xff1a;Git (git-scm.com) 点击"Download for Windows"&#xff0c;跳转至详细下载页面。 以Windows64位安装版为例&#xff0c;点击"64-bit…

代码随想录算法训练营第42天| 416. 分割等和子集

代码随想录算法训练营第42天| 416. 分割等和子集416. 分割等和子集416. 分割等和子集 题目链接&#xff1a;416. 分割等和子集&#xff0c;难度&#xff1a;中等 【实现代码】 class Solution { public:bool canPartition(vector<int>& nums) {int sum 0;for (int…

抢鲜发布:Flutter 3.7更新详解

本文首发自「慕课网」(imooc.com)&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;CrazyCodeBoy|慕课网讲师 新年伊始&#xff0c;由 Flutter 3.7 正式版来「打头阵」&#xff01;我们与整个…

AI时代,重新理解阿里云

如果说&#xff0c;在数字化时代&#xff0c;阿里云给外界的标签是基于算力、数据等要素的基建角色&#xff0c;那么&#xff0c;在如今的智能化时代&#xff0c;基于自身强大的云计算能力和长期以往的AI技术积累&#xff0c;它的这种底座底色显然再一次被夯实、彰显。 作者|皮…

【Python_Scrapy学习笔记(六)】Scrapy框架基本使用流程

Scrapy框架基本使用流程 前言 本文中介绍 Scrapy 框架的基本使用流程&#xff0c;并以抓取汽车之家二手车数据为例进行讲解。 正文 1、Scrapy框架基本使用流程 创建爬虫项目&#xff1a;scrapy startprojecct 项目名 cd到项目文件夹&#xff1a;cd 项目名 创建爬虫文件&a…

PCB模块化设计06——HDMI接口PCB布局布线设计规范

目录PCB模块化设计06——HDMI接口PCB布局布线设计规范1、HDMI接口的定义2、HDMI管脚定义&#xff08;A型为例&#xff09;3、HDMI接口PCB布局要求4、HDMI接口布线要求PCB模块化设计06——HDMI接口PCB布局布线设计规范 1、HDMI接口的定义 高清晰度多媒体接口&#xff08;英文&…

Jina AI 创始人肖涵博士:揭秘 Auto-GPT 喧嚣背后的残酷真相

Auto-GPT 究竟是一个开创性的项目&#xff0c;还是一个被过度炒作的 AI 实验&#xff1f;本文为我们揭开了喧嚣背后的真相&#xff0c;并揭示了 Auto-GPT 不适合实际应用的生产局限性。 背景介绍 这两天&#xff0c;Auto-GPT&#xff0c;一款让最强语言模型 GPT-4 能够自主完成…

winform从入门到精通

环境 开发工具 visual studio 2019 16.11 community 基础框架 framework4.8 .net5需要开发工具小版本16.8以上 winform开发入门 windows桌面端应用开发框架 https://github.com/dotnet/winforms c#基础 partial class 创建项目 项目结构 引用&#xff1a;所依赖的系统库 …

编写猫咪相册应用 HTML

文章目录1. 标题元素标签2. p元素用于在网站上创建一段文本3. 注释4. 页面主要部分标识标签5. 通过使用img元素来为你的网站添加图片6. 使用锚点元素(a)链接到另一个页面7. 使用 section 元素将照片内容与未来的内容分开8. 无序列表(ul)元素&#xff0c;列表项(li)元素在列表中…