猜数字完全体?还能优化不?

1>> 前言

        首先感谢大家对之前文章的喜欢,你们的三连是我持续更新的动力

        继续采纳大佬们的意见,今天将以代码的形式,逐步剖析来进行分享和交流经验,希望能得到大家的喜欢。接下来和我一起步入C语言世界吧!

注:以下代码是C语言,但CSDN好像选不了,只有C++也可能是我没看到,欢迎评论区大佬指点一二

#include<stdio.h>
#include<string.h>
#include<time.h>//time时间戳的头文件 
#include<stdlib.h>//rand随机数的头文件
#include<windows.h>//调用windows系统命令的头文件 

void menu()//菜单 
{
	printf("****猜数字小游戏****\n");
	printf("*feng出品,必属精品*\n");
	printf("*****opt1.play******\n");
	printf("*****opt0.exit******\n");
	printf("********************\n");
	printf("请选择:>");
}
void game()
{
	int b=rand()%100 + 1; //随机数范围可以写成rand()%(最大值-最小值+1 )+最小值 
	int c=0;
	int count=5;//设置生命值为5 
	printf("一共有五条血");
	while (count)
	{
		printf("请输入数字(1-100):"); 
		scanf("%d",&c);//c是我们猜的数字 
		if (c < b)
		{
			printf("猜小了\n");	
		}
		else if (c > b)
		{
			printf("猜大了\n");	
		}
		else
		{
			printf("猜中了,正确数字是%d\n\n",b) ;
			break;
		}
		count--; 
		printf("你还有%d条血,用完就关机咯\n",count);
	}
	char f[30];
	if (count==0 )
	{
		printf("正确数字是%d\n",b) ;
		printf("你没机会了孩纸,请输入\"666\"则取消关机\n");
		system("shutdown -s -t 60");
		scanf("%s",f);
		if  (strcmp(f,"666")==0)
			{
				system("shutdown -a");
				printf("成功取消关机\n");
			}
			
	}
	
}
int main()
{
	srand((unsigned int)time(NULL));//设置随机数种子,以时间戳为种子,生成一次就好 
	menu();//菜单 
	int a=0;
	do
	{
		scanf("%d",&a);
		if (a == 1)
			{
				printf("开始游戏\n");
				game();//进入游戏 
				menu();
			}
		else if (a == 0 )
			{
				printf("退出游戏");
				break; 
			}
		else
			{
				printf("输入错误,请重新输入\n\n");
				menu(); 
			}
	}while (a);
	return 0;
}

 以上猜数字涉及到许多新手不知道的知识点,请容许我来一一介绍:

2>>分析代码

        我们读他人的代码第一步肯定是分析,看完头文件就找到main函数,从main函数开始一步步向下读,找到对应的跳转函数如menu菜单game游戏,以及不知道的rand、srand、time等等。

3>>rand怎么使用?srand是什么意思?

        rand是C语言中的随机数库函数,使用它需要头文件<stdlib.h>,这里我们需要知道rand的最大值是32767,也就是说rand的返回值在0-32767之间,但是我们使用时能发现一个问题,也就是两次打印结果一样,请看:

这就不得不提到srand这个库函数了,其实使用rand的时候srand自动设置为1(代表种子),我们没有更改srand数值,所以不管打印几次结果都是一样的,那我们要更改它的种子持续的变化,这又要一个随机值,那我们想要打造一个随机值有需要一个随机值,大家都有疑问:这不是自相矛盾了吗?肯定不是这样,这时我们可以想到我们电脑计算机中还有一个值是一直在变化的,那就是时间,但是时间我们肯定不能直接使用,所以我们就要用到时间戳(根据现在时间生成的一串数字,以匹配现在的时间),那么我们就要使用到time这个函数。

4>>time如何使用?

        time我也不知道具体的用法,只知道它的值是指针,现在还没学到,可以给它一个空指针,也就是NULL,但是time的类型是time_t,srand类型是int两个类型不匹配怎么办?诶不着急,在上篇文章讲过强制类型转换,我们只需要把time通过(unsigned int)转换为无符号整形即可。

这样我们的srand就是一个随机数种子了,也让rand可以生成随机数。

5>>rand范围怎么定义成自己想要的?

        这边给大家伙一个公式:rand() % (最大值-最小值+1)+最小值。什么意思呢?就是比如我们想要的随机数范围是1-100,那么我们套公式就可以得到:rand() % (100-1+1) +1。原理也很简单,我们rand范围是0-32767,那么%100就可以得到0-99之间的数,最后结果加1就可以得到1-100之间的数,是不是很神奇,哈哈我也是这么觉得。

6>>如何调用Windows系统命令?

        调用Windows系统命令需要用到system这个库函数,那库函数都有对应头文件,它的头文件是<windows.h>,这个是很好记的,然后使用系统命令只需要在ststem("");的双引号里输入就好,所有命令都和windows一样,我这里只调用了一个小小的关机命令(shutdown)还有更多的可以等着大家去探索。

7>>总结

        感谢大佬们能看到这里,这篇耗时43分钟,讲述了猜数字对小白来说的一些复杂代码,希望大佬们能够喜欢,我在这里表示由衷感谢!一起加油学习C语言吧!

  • 19
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值