C语言猜数字游戏

目录

思路:

1.电脑产生一个随机数

2.猜数字:a.猜大了     b.猜小了    c.猜中了

分析:

菜单函数:

游戏函数: 

1.产生随机数:

2.而srand函数:

game函数源码: 

源码: 

运行结果截图:


思路:

1.电脑产生一个随机数

2.猜数字:a.猜大了     b.猜小了    c.猜中了

分析:

菜单函数:

void menu()
{
	printf("########################\n");
	printf("########1.play#########\n");
	printf("########0.Exit#########\n");
}

游戏函数: 

1.产生随机数:

a.需要调用rand函数,rand()%100+1表示的是产生一个在1至100的随机数。

原因:任意一个数对100取余数结果必小于100,在加上1则是产生100以内的随机数。

如果对rand函数的概念不理解,可以查一下:

b.由上面这个图知道rand随机的范围是0到RAND_MAX,RAND_MAX是7fff(十六进制),转化为十进制是32767,但是如果你只是这样设计的话,你将会发现: 运行这个程序产生随机值后,关闭再运行,会发现两次运行的结果对应的位置随机相同!!!

如下图:

c.如果每一轮对应位置的随机值都相同的话,可能与我们的预期不相同,因此我们需要再修改一下!!!那修改什么呢?答案在上上个图:

 

就是最后一句话:

Use the srand function to seed the pseudorandom-number generator before calling rand. 

意思:调用rand函数前要调用srand函数进行产生随机数生成器。

2.而srand函数:

Sets a random starting point.设置一个随机的起点。

调用它是:srand(unsigned int seed)这里要放一个时刻变化量,否则产生的随机值是不变的。

 而什么是时刻可以变化的呢?答案不言而喻,时间呗。

那怎么输入一个时间呢?那么我们需要理解一个给概念:时间戳

在C语言中有一个函数可以输出时间戳:time函数

 由此调用scrand函数是这样的:    srand((unsigned int)time(NULL));

而且这个调用要写在主函数,而不是game函数,因为如果输入过快,则导致两次随机值相同:

game函数源码: 

void game()
{
	int guess = 0;
	int ret = rand() % 100 + 1;
	printf("%d\n", ret);
	while (1)
	{
		printf("guess the number:");
		scanf("%d", &guess);
			if (guess > ret)
			{
				printf("guess a bigger!\n");
			}
			else if (guess < ret)
			{
				printf("guess a litter!\n");
			}
			else
			{
				printf("Find!\n");
				break;
			}
	}
}

源码: 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
	printf("########################\n");
	printf("########1.play#########\n");
	printf("########0.Exit#########\n");
}
void game()
{
	int guess = 0;
	int ret = rand() % 100 + 1;
	printf("%d\n", ret);
	while (1)
	{
		printf("guess the number:");
		scanf("%d", &guess);
			if (guess > ret)
			{
				printf("guess a bigger!\n");
			}
			else if (guess < ret)
			{
				printf("guess a litter!\n");
			}
			else
			{
				printf("Find!\n");
				break;
			}
	}
}
int main(void)
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("please choose :->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:game();
			break;
		case 2:printf("EXIT\n");
			break;
		defalut: printf("Choose wrong! again choose!\n");
			break;
		}		
	} while (input);
	return 0;
}

运行结果截图:

猜你喜欢

转载自blog.csdn.net/m0_68865259/article/details/124566571
今日推荐