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("*庄奕出品,必属精品*\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语言吧!
标签:rand,srand,头文件,数字,int,printf,完全,time,优化 From: https://blog.csdn.net/m0_69282950/article/details/141133511