游戏要求:1、生成1~100的数字。2、玩家猜数字,在猜数字的过程中,根据玩家填入的数字给出大了还是小了的提示,猜对游戏结束。在写猜数字游戏前我们还需有一些基础的知识储备。
1、rand函数
C语言提供了一个函数叫rand,它会随机生成一个数。rand函数会返回一个伪随机数,它的大小范围是从0~32767。使用rand函数需要包含头文件:stdlib.h
看如下代码:
#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());
return 0;
如上图是代码运行出来的结果是rand函数随机返回的值,但我们会发现无论我们运行多少次我们得到的数都是一样的。如果深入了解我们会发现生成的不是随机值而是伪随机值,伪随机值和随机值有所不同,随机值是猜不到下一个生成的只是什么的,而伪随机值是通过某种算法生成的数值。rand()函数是对一个叫“种子”的基准值进行运算生成 的随机值。之所以上面的生成的数一直相同是因为rand()函数种子默认为1。想让数字不断变化我们就得让种子的数值不断变化。
2、srand函数
C语言又提供了一个函数叫srand,用来初始化随机数的生成器。程序在调用rand之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成的随机数的时候的种子,只要种子在变化,随机值也就随机变化起来了。所以说srand函数的种子是随机的,而rand函数生成随机数,在生成随机数的时候还需要加入一个随机数这就产生矛盾了。在这个时候我们就会很困惑,我们怎么样生成一个随机值呢?
3、time
在程序中我们一般是使用时间作为种子,因为时间是一直改变的。在C语言中有一个函数叫做time。time会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回类型是time_t类型。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());
printf("%d\n", rand());
return 0;
}
由此程序运算结果可以看出,得出的数是随机值。
4、设置随机值的范围
我们要设置随机值的范围在1~100之间`:
rand() % 100 + 1;
由上述的代码我们可以得到随机数范围在1~100之间
5、猜数字游戏的实现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
game()
{
int num = 0;
int r = rand() % 100 + 1;
while(1)
{
printf("请输入你选择的数字:");
scanf("%d", &num);
if (num < r)
{
printf("猜小了!\n");
}
else if (num > r)
{
printf("猜大了!\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
void menu()
{
printf("*******************\n");
printf("*******1、play*****\n");
printf("*******0、out *****\n");
printf("*******************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
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;
}
`