分支与循环,猜数游戏带关机效果

本文介绍了C语言中的rand()函数用于生成伪随机数,srand()用于设置随机数生成器的种子,以及time()函数获取当前时间作为种子。通过一个猜数游戏示例,展示了如何使用这些函数实现随机数的生成和游戏逻辑。
摘要由CSDN通过智能技术生成

分支与循环,猜数游戏带关机效果

rand函数

c语言提供了rand函数来产生随机数,它包含在<stdlib.h>头文件中。
函数原型为
在这里插入图片描述
它产生的随机数范围在0~RAND_MAX,RAND_MAX是依赖编译器实现的,在大部分的编译器上RAND_MAX为32767。但是rand产生的随机数是一个伪随机数。我们通过例子来理解
多组数据输出并多次运行后我们得到的结果都是一样的:

在这里插入图片描述在这里插入图片描述
因为rand的产生的随机数是通过某种算法来实现的,它对一个叫“种子”的基准值进行运算,最后产生一个伪随机数。这个种子的默认值为:1。
所以这里我们需要通过调用srand函数来更改这个种子的值。

srand函数

c语言提供了一个srand函数来初始化随机数的生成器,或者说“用来改变随机数生成器的初始状态”。srand的函数原型为:

void srand(unsigned int seed);

通过srand的参数seed来设置rand函数生成随机数时的种子。只要种子发生了变化,那产生的随机数也就会发生变化。
只要seed是一个随机数,那么rand函数的种子也是一个随机数,最后生成的数也必定是个随机数,但是在生成随机数的时候又需要一个随机数,这不就矛盾了吗?
所以这里要我们需要用到time函数。

time函数

c语言提供了一个time函数用来获取程序运行的时间,包含在头文件<time.h>中,它的函数原型为:

time_t time (time_t* timer);

time函数会返回一个从1970年1⽉1⽇0时0分0秒到当先日历时间的时间差,也叫做时间戳。我们往time函数里传入一个空值NULL,那么它返回的值就只是这个时间差。

time(NULL);

随机数猜数游戏

代码其实很简单,不知道的点可能就是前面讲的函数,因为可能没有接触过。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


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

void game()
{
	int guess = rand()%100+1;//控制随机数的范围在0~100之间
	int input = 0;
	int count = 7;

	while(count)
	{
		printf("请输入你猜的数: ");
		scanf("%d", &input);
		if (input > guess)
		{
			printf("猜大了\n");
		}
		else if (input < guess)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
		count--;//猜错一次,次数减一;
	}
	if (count == 0)
	{
		printf("没机会了 ");
		system("shutdown -s 0-t 60");//60秒后关机
	}
}

int main()
{

	srand((unsigned int)time(NULL));//讲时间戳强转为unsigned int类型
	int n;
	do {
		menu();
		scanf("%d",&n);
		switch (n)
		{
		case 1:printf("开始游戏"); game(); break;
		case 0:printf("游戏结束"); break;
		default:printf("请重新输入:");
			break;
		}
	} while (n);
	return 0;
}
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值