C语言实现猜数字游戏

引言:

在掌握了前面的分支循环使用之后,我们就可以写一些稍微有趣的代码了,例如,我们可以实现一个猜数字游戏。

一.随机数的生成

要想完成猜数字游戏,我们就需要生成随机数,那么该如何产生随机数呢?

C语言中提供了一个函数叫做rand,这函数是可以生成随机数的,函数原型如下:

int rand(void);

但是值得注意的是,rand函数生成的随机数是一种伪随机数,并不是真正意义上的随机,这个随机数范围在0——32767之间,rand函数使用时需要加上一个头文件:stdlib.h。

我们用下述代码来演示一下rand函数:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    return 0;
}

                  

看上去两次编译运行结果相同,恰恰说明了rand所提供的随机数是一种伪随机,是通过某种算法生成的随机数,真正的随机数是无法预测下一个数是多少的,如果要生成不同的随机数,那我们就需要改变一下函数。

二.srand函数

C语言中又提供了一个函数叫做srand,是用来初始化随机数的生成器的,srand函数的原型如下:

void srand(unsigned int seed);

程序中调用rand函数之前先调用了srand函数,通过srand函数的参数seed来设置rand函数随机数生成的种子,只要种子在变化,每次生成的随机数也就变化起来了。那就是说给srand的种子如果是随机的,rand就能生成随机数,在生成随机数时又需要一个随机数,这就相互矛盾了。

三.time函数的引入

在程序中我们一般是使用程序运行的时间作为种子,因为时间是时刻在变化的。

在C语言中有一个函数叫做time,就可以获得这个时间,time函数原型如下:

time_t time(time_t* timer);

time函数会返回当前的日历时间,其实返回的是现在的时间距离1970年1月1日0时0分0秒的差值,单位为秒,其返回类型是time_t类型,time_t类型实际上是32位或64位的整型类型。

time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回值的差值放在timer指向的内存中带去。

如果timer是NULL,就只返回这个时间差值。time函数返回的这个时间值也叫做时间戳。

time函数使用时需要包含头文件:time.h,那么我们就可以让生成随机数的代码改写如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand((unsigned int)time(NULL));
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    return 0;
}

                                                      

 再次观察,每次运行的结果就不同了,就代表我们的随机数设置成功了。

四.设置随机数的范围

如果我们要生成0——99之间的随机数,方法如下:

rand()%100;//余数范围为0到99

 如果我们要生成1——100之间的随机数,方法如下:

rand()%100+1;//余数是0——99,+1后范围是1——100

  如果我们要生成100——200之间的随机数,方法如下:

100+rand()%101;//余数范围是0——100,加上100范围为100——200

五.猜数字游戏的实现

我们要先想象一下猜数字游戏的架构,先给出一个随机数,是我们要猜的数字,如果猜大了,则给予提示,并且重新猜测,猜小了,就给出提示猜小了,如果猜对了,就可以提示恭喜通关,也可以增加难度比如只能猜三次。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	int r=rand()%100+1;
	int guess=0;
	int count=5;
	while(count)
	{
		printf("\n你还有%d次机会\n",count);
		printf("请猜数字>:");
		scanf("%d",&guess);
		if(guess<r)
		{
			printf("猜小了,请重新猜测\n");
		}
		else if(guess>r)
		{
			printf("猜大了,请重新猜测\n");
		}
		else
		{
			printf("恭喜你,完成猜测,奖励100元\n");
			break;
		}
		count--;
	}
	if(count==0)
	{
		printf("你失败了,好好反思下最近是不是没有努力\n");
	}
}
void menu()
{
	printf("********************\n");
	printf("*******1.play ******\n");
	printf("*******0.exit ******\n");
	printf("********************\n");
}
int main()
{
	int input=0;
    srand((unsigned int)time(NULL));
    int n=rand();
    int m;
    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;
}

最后,完整代码附上,快上你的vs2022试试吧!喜欢的话可以点个赞支持一下哦!

相关推荐

  1. c语言数字游戏

    2024-03-27 04:54:02       64 阅读
  2. C语言数字游戏

    2024-03-27 04:54:02       59 阅读
  3. C语言实现简单的数字游戏

    2024-03-27 04:54:02       62 阅读
  4. 数字游戏C语言代码)

    2024-03-27 04:54:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 04:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 04:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 04:54:02       87 阅读
  4. Python语言-面向对象

    2024-03-27 04:54:02       96 阅读

热门阅读

  1. docker部署nacos(单机与集群)

    2024-03-27 04:54:02       42 阅读
  2. 【OpenStack】OpenStack实战之开篇

    2024-03-27 04:54:02       42 阅读
  3. MyBatis

    MyBatis

    2024-03-27 04:54:02      33 阅读
  4. day 39 动态规划02

    2024-03-27 04:54:02       33 阅读
  5. leetcode 455.分发饼干

    2024-03-27 04:54:02       39 阅读
  6. 前端实现导出xlsx功能

    2024-03-27 04:54:02       41 阅读