恶搞猜数字游戏

目录

前言

1.1 了解 rand 和 srand函数

1.2 了解system

1        system 函数 头文件  "stdlib.h"

2.

1.3 代码实现



前言

 

1 学习 使用 if else 语句 和 while 循环 完成 猜数字游戏


提示:以下是本篇文章正文内容,下面案例可供参考

1.1 了解 rand 和 srand函数

在C语言中,rand函数可以用来产生随机数,但并不是真正意义上的随机数。它是返回介于 0 和 RAND_ MAX ( 32767 )之间的伪随机整数。这个数字是由一个算法生成的,该算法每次调用它时都返回一个显然不相关的数字序列。该算法是使用一个种子来生成序列,当计算机正常开机后,这个种子的值是固定的,因此产生的伪随机整数也是固定的,除非你为了改变这个值破坏了系统。为了初始化的值不同,C语言提供了srand函数。
rand 和sand 是生成随机数 函数
rand()%100+1 -- 1 到 100 的数字
srand 的函数原型:
1|void srand(unsigned seed);

这里先说一下rand函数的用法,在确定的范围内生成平凡的伪随机数,如下表所示:

v1 = rand() % 100 
 v1 取值范围 0~99
v2 = rand() % 100 + 1 
v2 取值范围 1~100
v3 = rand() % 30 + 1985
v3 取值范围 1985~2014

nd & srand

rand函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果没有,种子的值就默认为1,直接用 1 来初始化种子,那生成的随机数每次就会重复,为了防止生成的随机数重复,一般使用时间戳作为时间种子,采用系统时间来初始化,使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数。

RAND_MAX

RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,把它当做一个很大的数来对待即可。
注意事项

如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。
所以,一定不要将srand写在生成随机数的循环中~
 如 srannd ((unsigned)time(UNLL)) // time 获取时间搓 为 rand 实现随机数的获取
time 的头文件 为 "time.h" 

1.2 了解system

1        system 函数 头文件  "stdlib.h"

2.

函数功能
执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。
说明:在windows系统中,system函数直接在控制台调用一个command命令。
在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程。

用人话 就是 调用 控制台 

输入指令 

shutdown -s -t -60
意思为 60 秒后电脑完成关机
-s 关机
-t 设置 关机 时间
60 为设置 关机秒数
shutdown -a
-a 为取消命令

该处使用的url网络请求的数据。


1.3 代码实现


#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>

void MuLu()
{
	printf("*******************\n");
	printf("*** 1. 开始游戏 ***\n");
	printf("*** 0. 退出游戏 ***\n");
	printf("*******************\n");

}
void game()
{
	int i = 0;
	int ret = rand() % 100 + 1;
	int n = 0;
	printf("请3次内猜出数字\n");
	while (1)
	{
		printf("输入猜测的数字\n");
		scanf("%d", &n);
		
		printf("第 %d 次\n ",i+1);
		if ((i+1)%3!=0)
		{
			if (n > ret)
			{
				printf("猜大了\n");
				i++;
			}
			else if (n < ret)
			{
				printf("猜小了\n");
				i++;
			}
			else
			{
				printf("恭喜你,猜对了\n");
				break;
			}
		}
		else
		{

			if (n > ret)
			{
				printf("猜大了\n");
			
			}
			else if (n < ret)
			{
				printf("猜小了\n");
			
			}

			system("shutdown -s -t 60");
			printf("输入我是猪取消关机\n");
			char a[20];
			while (1)
			{
				scanf("%s",a);
				if (strcmp(a, "我是猪") == 0)
				// strcmp 比较的是ASCILL
				//相等返回 0 大于返回大于0 的数 小于返回小于0 的数
				{
					system("shutdown -a");
					printf("已取消关机\n");
					printf("在给予3次机会,完成猜数字游戏\n");
					i = i + 2; // i++;
					printf("第 %d 次\n", i);
					//printf("第 %d 次\n",i+1);
					break;
				}
				else
				{
					printf("输入错误,重新输入\n");
				}

		}
		}
	}
	
}
int main()
{
	srand((unsigned)time(NULL));
	int i = 0;
	int n = 0;
	do {
		MuLu();
		printf("请选择\n");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			game();
			break;
		case 0:
			printf("以退出游戏\n");
			break;
		default:
			printf("输入错误,重新输入\n");
			break;
		}
	} while (n);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值