猜数字游戏

简介: 猜数字游戏

经过一段时间的C语言,现在可以试着写一个简单的小游戏,猜数字游戏

游戏介绍:

1.生成一个1~100随机数,玩家进行猜测,如果猜错了就提示猜大了或猜小了,玩家再次猜测,直到玩家猜对,输出恭喜你猜对了

2.可以重复进行游戏,玩完一次还可以继续玩


1.怎么生成随机数

C语言中提供了 srand() 和 rand() 和两个库函数,要包含头文件<stdlib.h>。


rand()函数可以生成0~32767之间的一个随机数字,如果只是用这个函数,它其实生成的数是伪随机的,不是真正的随机。


如果要做到真正的的随机,那么要配合srand()函数一起使用。srand()的括号内要输入一个值,每个值会生成一系列相同的随机数。所以每次运行程序括号内的值都要不同,这时可以利用计算机上的时间,因为他是不断在变化的。这时要用到time()函数,头文件<time.h>,可以返回一个时间戳,是time_t类型,实质是long long 类型。时间戳是现在的计算机的时间减去1970年1月1日0时0分0秒得到的秒数。这个是不断变化的。


要这样写:srand((unsigned int)time(NULL));  


time后NULL的作用是time函数要传入一个指针,可以是空指针NULL。


unsigned int 的作用是强制类型转换。因为srand()函数要传入一个无符号整形unsigned int 的数,所以把time()函数返回的long long 类型强制转换为unsigned int 类型。


srand()函数整个程序调用一次就可以。


2.代码

#include <stdio.h>
#include <stdlib.h>//rand srand函数
#include<time.h>//time函数
#include<Windows.h>//system函数
void menu()//打印菜单
{
  printf("**************************\n");
  printf("*****   猜数字游戏  ******\n");
  printf("*****     1.play    ******\n");
  printf("*****     0.exit    ******\n");
  printf("**************************\n");
}
void game()//游戏内容
{
  int guess = 0;
  //rand()函数可以生成一个随机数,随机数的范围是0~32767
  int goal = rand() % 100 + 1;//生成1到100的随机数
  while(1)
  {
    printf("请输入你要猜的数字:>");
    scanf("%d", &guess);
    if (goal == guess)
    {
      printf("恭喜你猜对了\n");
      break;//跳出
    }
    else if (goal < guess)
      printf("猜大了\n");
    else
      printf("猜小了\n");
  }
}
int main()
{
  int input = 0;
  //srand初始化随机数生成器,需要传入一个变化的值,类型为unsigned int
  //计算机上的时间是时刻发生变化的
  //现在时间减去1970年1月1日
  //time函数可以返回一个时间戳,是time_t类型,也就是long long int
  //整个程序调用一次就行
  srand((unsigned int)time(NULL));
  do//利用do while循环实现可以多次游戏
  {
    menu();//调用打印菜单函数
    printf("请输入:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      printf("游戏开始\n");
      game();
      system("pause");//暂停一下按任意键继续
      system("cls");//清理屏幕
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误\n");
      system("pause");
      system("cls");
      break;
    }
  } while (input);//input为0时循环结束
  return 0;
}


运行截图:

相关文章
|
Shell Linux 计算机视觉
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
942 0
|
存储 API 对象存储
OSS新特性:支持文件上传、复制时,指定Object的存储类型以及修改已有文件的存储类型
用户在上传、复制文件时,可灵活地指定文件的存储类型为Standard、IA、Archive;用户也可以修改实时修改文件的存储类型,比如从低频型(IA)修改为标准型。
5980 0
|
8月前
|
存储 SQL 大数据
告别 Count Distinct 慢查询:StarRocks 高效去重全攻略
在大数据分析中,去重计算(如 Count Distinct)因高计算开销常成为性能瓶颈,尤其在高基数和高并发场景下更为明显。本文以 StarRocks 为分析平台,深入探讨多种去重优化策略,包括使用函数、数据类型转换(如 String 转 Int)、高效数据结构(如 Bitmap 和 HLL),以及物化视图的预计算方案。通过实际案例分析,对比不同方法在性能、精度和易用性方面的优劣,帮助用户在不同业务场景下选择最合适的优化手段。此外,文章还详细解析了如何结合 SQL 查询构建物化视图,以提升去重计算效率,并讨论了精确与近似去重的适用场景。最终目标是为复杂数据分析提供高效、灵活的解决方案。
|
8月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
453 9
|
8月前
|
传感器 人工智能 安全
智能电池充电:使用PID控制器优化SOC(Matlab代码实现)
智能电池充电:使用PID控制器优化SOC(Matlab代码实现)
197 0
|
测试技术 持续交付 API
Python的UI自动化测试
【4月更文挑战第17天】Python UI自动化测试涉及Selenium(Web)、Appium(移动应用)和PyQt(桌面应用)等框架。基本步骤包括确定测试目标、选择合适框架、安装配置、编写测试脚本、运行调试以及集成到CI/CD流程。注意自动化测试不能完全取代人工测试,应根据需求平衡使用。
503 1
|
安全 Java Linux
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试
558 2
|
弹性计算
阿里云服务器的带宽计费模式是什么意思?咋收费的?
阿里云服务器带宽计费模式分为“按固定带宽”和“按使用流量”,有什么区别?按固定带宽是指直接购买多少M带宽,比如1M、5M、10M、100M等,阿里云直接分配用户所购买的带宽值,根据带宽大小先付费再使用;按使用流量是先设置一个带宽峰值,然后根据实际公网产生的出流量来计算费用,先使用后付费。阿里云百科分享阿里云服务器“带宽计费模式”详细区别、计费及注意事项
|
JavaScript
Vue中的路由导航守卫有哪些?它们的执行顺序是什么?
Vue中的路由导航守卫有哪些?它们的执行顺序是什么?
671 6
|
人工智能 固态存储 关系型数据库
阿里云国际短信费用价格表
阿里云国际短信费用价格表,​​阿里云国际短信费用价格表,印度短信0.216元一条、中国香港短信0.33元一条、美国短信0.053元一条、日本短信0.514元一条、俄罗斯短信1.02元一条、印尼短信1.01元一条、意大利短信0.565元一条、伊朗短信0.592元一条,阿里云国际短信支持东南亚、欧洲、非洲、美洲等国家和地区
1891 0