这是一初学c语言的新人的第一篇博客
尝试使用Markdown的方式写入
(本来用的51cto,发现人好少,于是跑过来了)

什么是Markdown

Markdown是现在普遍使用的一种文档书写语言格式,只需用一些非常简单易记的符号,如(#*/>[]0\),就可以轻松写出一篇具有良好的排版和可读性的文
.
接下来进入我们的正题

猜数字游戏

这是一非常经典的代码应用
基本逻辑如下:

1.计算机生成一个随机数
2.玩家输入一个猜想的数字
3.计算机提示“猜大了”或者“猜小了”
并在玩家猜测正确时提示“恭喜你,猜对了”

先来看看游戏最终是什么样子的吧
小白必学!简单的C语言应用==>猜数字游戏_猜数字游戏
玩家运行,可以看到一个菜单以及选择

小白必学!简单的C语言应用==>猜数字游戏_随机数_02
键入1即为开始游戏

小白必学!简单的C语言应用==>猜数字游戏_猜数字游戏_03
系统在玩家猜小或者猜大之后都会有对应的提示,猜对之后程序也会再次运行,玩家可以选择退出或者再来一次
那么这个猜数字游戏是怎么实现的呢?
首先我们制作一个简易的menu

void menu()
{
	printf("*****************************\n");
	printf("****  1.play   0.exit    ****\n");
	printf("*****************************\n");
}

光是这个menu还不够,我们需要写一个代码串来实现在1.play和0.exit之间选择的功能

switch case语句

为了实现这个功能,我使用的是switch语句

menu();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
	game();//猜数字游戏
	break;
case 0:
	printf("退出游戏\n");
	break;
default:
	printf("选择错误\n");
	break;
}

是不是觉得少了点什么?别急
玩家肯定想多次游玩这个猜数字游戏
总不能是一个一次性游戏吧
所以我们需要给这个switch加上循环语句
这里我用的是do whlie循环

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//猜数字游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
	return 0;
}

因为我们这里用到了scanf库函数,所以我们需要引用头文件 #include <stdio.h>
注意这里我们的game()函数是接下来要编写的猜数字游戏的主要函数
我们可以先屏蔽掉game()来测试目前代码是否正确小白必学!简单的C语言应用==>猜数字游戏_随机数_04
如果你能复现和我一样的运行框,说明目前编译的选择程序是没问题的

接下来便是重头戏

如何编写我们的game()程序?
这里我们要先引入一个rand函数
rand是一个生成随机数字的函数 [点击查看rand函数定义]
小白必学!简单的C语言应用==>猜数字游戏_猜数字游戏_05
从定义我们可以得知,rand能生成的是0到RAND_MAX的整数小白必学!简单的C语言应用==>猜数字游戏_c#_06
通过查询百度百科我们可以知道RAND_MAX最小为7FFF
使用WIN10自带的计算器中的程序员计算器,可以得知7FFF(16进制)即为32767(十进制)
接下来我们可以编译一个简单的程序查看rand会生成什么数字

void game()
{
	int ret = 0;
	int guess = 0;
	ret = rand()%100+1; //生成1-100的随机数
	printf("%d\n", ret);
}
 

小白必学!简单的C语言应用==>猜数字游戏_c#_07
程序很好的生成了1-100的数字,但是真的有这么简单吗?
如果你再次运行程序,就会发现两次运行每次生成的结果都一模一样
玩家即便是重新进行游戏,猜的还是上一次猜的数字,那怎么行?
这里我们就要引入和rand相关的另外一个小知识点

生成随机数起始点

如果你在上面提到的rand定义的网站继续往下滑,便能看到srand
小白必学!简单的C语言应用==>猜数字游戏_游戏_08
这就是我们接下来要用到的函数

void game()
{
	int ret = 0;
	int guess = 0;
	ret = rand()%100+1;//生成1-100的随机数
	srand(1);
	printf("%d\n", ret);
}
 

我们先添加srand(1)查看效果小白必学!简单的C语言应用==>猜数字游戏_猜数字游戏_09
这时每次生成的随机数字变成统一的42
如果我们改成srand(2)的话小白必学!简单的C语言应用==>猜数字游戏_编程语言_10
会发现除了第一个数字是42之外,其他的数字都是46
这是因为rand函数需要另外一个随机数作为它生成随机数的起点
如果我们想要rand每次都能生成不一样的随机数的话
就必须用srand(这里需要一个随机数)
这不是套娃吗?我们需要随机数来生成一个随机数,程序不会死循环?
那什么样的数字是会一直变化的呢?

时间函数

这里又要引入另外一个time函数
小白必学!简单的C语言应用==>猜数字游戏_c#_11
同时我们需要了解时间戳的定义

时间戳
当前计算机的时间-计算机的起始时间(1970.1.1 0:0:0)=(xxxx)秒

这个数字便是我们最易得的随时在变化的数字
我们同样可以在刚才查询rand定义的网站找到time的定义 [点我查看]
小白必学!简单的C语言应用==>猜数字游戏_游戏_12
我们把刚才是srand(2)改成如下格式,再次调试代码

  • time函数需要引用头文件#include <time.h>
    小白必学!简单的C语言应用==>猜数字游戏_随机数_13
    这一次我们终于生成了完全随机的1-100的数字
    小白必学!简单的C语言应用==>猜数字游戏_编程语言_14
    但是有另外一个问题
    这个game函数是处在main函数循环语句中的
    小白必学!简单的C语言应用==>猜数字游戏_c#_15
    也就是每次游戏的时候,game函数都会重新生成一个新的随机数
    玩家猜测的并不是一个固定的数字,那也永远猜不到答案
    所以我们应该把srand添加到main主函数中,这样每一次游戏只会生成一个固定的随机数,这才是我们最终想要的效果小白必学!简单的C语言应用==>猜数字游戏_猜数字游戏_16
    接下来我们需要编写if、else if语句来实现游戏的猜测以及提示
while (1)
	{
		printf("猜数字:>");
		scanf("%d", &guess);
		if (guess>ret)
		{
			printf("猜大了\n");
		}
		else if (guess<ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对啦\n");
			break;
		}
	}
 

同时我们要屏蔽掉刚才放入game函数中的srand以及会告诉玩家答案的printf
小白必学!简单的C语言应用==>猜数字游戏_随机数_17

这样我们的猜数字游戏就大功告成了!

来试玩一下吧!小白必学!简单的C语言应用==>猜数字游戏_c#_18
可以看到游戏正是我们需要的样子
玩家也可以重复游戏

这篇小博客到这里也就结束了

第一次尝试的时候,手贱不小心按了F5,写了一半的博客直接无了
不管怎样,感谢你看到最后