目录
前言
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;
}