srand、rand、time函数的正确使用(猜数字游戏)

  • Post author:
  • Post category:其他


这篇文章我简要介绍srand、rand、time函数的使用,并用他们一起来完成一个猜数字游戏


目录


一、随机数产生函数


1、rand函数,


2、srand函数,


3、time函数,


二、猜数字游戏


1.游戏菜单:


2.游戏进入、退出程序


3、完成游戏运行本体(game函数的实现)

一、随机数产生函数

1、rand函数,

他就是我们今天用来生成随机数的重要嘉宾,这个函数接受一个种子,就可以根据这个种子产生一系列用算法实现的随机数;

2、srand函数,

这个函数就是为rand函数提供种子的函数,他们两个要一起使用,我们可以在srand函数中放置一个数,这样rand函数就可以根据种子产生随机数了,比如我们给个100,srand(100);这样我们就可以得到一系列由100计算得来的随机数了;

3、time函数,

rand函数确实是产生了随机数,但是这个种子是固定的,所以rand函数产生的数每次都是一样的,但是同样的计算结果,我们只需让种子每次不一样就够了,于是,我们就可以将时间放到srand函数中种子的位置;例如这样:srand((unsigned int )time(NULL))。至于为什么这么写大家可以去看看我的上一篇博客,里面对这三个函数的使用都有了更详细的介绍;

二、猜数字游戏

我们将猜数字游戏分为几个部分

1.游戏菜单。

2.游戏进入、退出程序

3.完成游戏运行本体(game函数的实现)

1.游戏菜单:

这样一个简单的游戏菜单就做好了,

2.游戏进入、退出程序

我们可以设置一个while循环,可以让用户不停进行游戏,直到用户想退出游戏,这样,我们可以配合选择结构,来让用于输入不同的值,进行不同的程序;

int main()
{
	int num;
	int guess;
	printf ("这是一个猜数字游戏 ,你可以选择以下选项:\n\n"); 
    do
	{
		mean();                                              //打印菜单
		printf ("请输入你的数:\n");
		scanf ("%d",&guess);                                 //用来接受用户命令,变量guess 
		switch (guess)
		{
			case 1: game();break;                              //输入1,游戏开始 
			case 0: printf ("游戏退出成功:\n");break;          //输入0,退出程序 
			default  : printf ("\n\n请输入正确的数:\n");break; //输入不是选单中的数,让用户重新选择 
		}
	}while (guess);
	//直到用户输入的guess值是0,停止循环 
	return 0;
  }  

3、完成游戏运行本体(game函数的实现)


因为我们要使用time、rand、srand函数,所以要引相对应的头文件<time.h>和<stdlib.h>。

设置一个while循环,将rand函数生成的数定在范围1—100中间,并且根据用户输入的值判断大于、小于、等于rand函数生成的值,大于则提示用户输入过大,小于则提示输入过小,等于则恭喜用户猜对,并且输入用户猜了多少次,再结束game函数,退到主函数的循环程序中,继续循环,直至用户输入0退出程序;

我们将在程序运行阶段就利用time函数产生一个数作为srand的值,使rand函数每次开始的种子不同,产生的值不用,让rand产生的值更加随机。

下面来具体实现game函数

void game ()
 {
 	int input;                       //用户输入的数字
 	int count=0;                     //统计用户输入次数
	srand ((unsigned int)time(NULL));//种子生成
	int num1=rand()%100+1;           //随机数num1,范围是1——100
	printf ("游戏开始,请输入一个数:\n");
	while (1)
	{
		scanf ("%d",&input);        //用户输入数字
		if (input>num1)             //猜大的提示
		{
			count ++;
			printf ("猜大了\n");
		}
		else if (num1>input)       //猜小的提示
		{
		 count++;
		 printf ("猜小了\n") ;
		}
		else                       //猜对之后的鼓励
		{
		printf ("*******恭喜您终于猜对了*****\n\n"); 
		printf ("您一共猜了%d次,\n\n\n",++count);
		for (int j=0;j<count;j++)
		printf  (",good good good\n");
		printf ("\n\n\n");
		break;
		}
	}

好的 ,接下来我们将在程序运行阶段就利用time函数产生一个数作为srand的值,使rand函数每次开始的种子不同,产生的值不同,让rand产生的值更加随机。(为什么将srand放在主程序调用一次rand函数产生的值就更随机这件事,如果还不理解可以去看看我的上篇博客,里面有更详细的模拟介绍)

并且将3个函数关联起来使用,则可以得到猜数字游戏简化版,代码如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 void mean()
{
	printf ("******************************\n");
	printf ("*****1:游戏开始    0:退出游戏\n");
	printf ("******************************\n");
}
void game ()
 {
 	int input;                       //用户输入的数字
 	int count=0;                     //统计用户输入次数
	int num1=rand()%100+1;           //随机数num1,范围是1——100
	printf ("游戏开始,请输入一个数:\n");
	while (1)
	{
		scanf ("%d",&input);        //用户输入数字
		if (input>num1)             //猜大的提示
		{
			count ++;
			printf ("猜大了\n");
		}
		else if (num1>input)       //猜小的提示
		{
		 count++;
		 printf ("猜小了\n") ;
		}
		else                       //猜对之后的鼓励
		{
		printf ("*******恭喜您终于猜对了*****\n\n"); 
		printf ("您一共猜了%d次,\n\n\n",++count);
		for (int j=0;j<count;j++)
		printf  (",good good good\n");
		printf ("\n\n\n");
		break;
		}
	}
  int main()
{
    srand ((unsigned int)time(NULL));//种子生成
	int num;
	int guess;
	printf ("这是一个猜数字游戏 ,你可以选择以下选项:\n\n"); 
    do
	{
		mean();                                                 //菜单的打印 
		printf ("请输入你的数:\n");
		scanf ("%d",&guess);                                    //用来接受用户命令,guess 
		switch (guess)
		{
			case 1: game();break;                               //输入1,游戏开始 
			case 0: printf ("游戏退出成功:\n");break;          //输入0,退出程序 
			default  : printf ("\n\n请输入正确的数:\n");break; //输入不是选单中的数,让用户重新选择 
		}
	}while (guess);
	//直到用户输入的guess值是0,停止循环 
	return 0;
  }  

以上就是本篇文章的全部内容了,希望大家希望,大家一起学习C语言,一起努力,冲冲冲。



版权声明:本文为Brant_zero原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。