猜数字小游戏( C 语言)
1、代码实现:
引用头文件:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
菜单函数:
//打印菜单
void menu()
{
printf("**********************\n");
printf("******* 1.play *******\n");
printf("******* 0.exit *******\n");
printf("**********************\n");
}
猜数字小游戏函数:
//游戏
void game()
{
//随机生成一个数字 100~200之间
int r = rand() % (200 - 100 + 1) + 100;
int guess = 0;
int count = 5;
//猜数字
while (count)
{
printf("剩余 %d 次机会\n",count);
printf("请输入数字:>");
scanf("%d", &guess);
if (guess < r)
{
printf("猜小了\n");
}
else if (guess > r)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
count--;
}
if (count == 0)
{
printf("很遗憾,你失败了,正确答案是:%d\n", r);
}
}
主函数:
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("退出游戏");
break;
default:
printf("选择错误,请重新选择");
break;
}
} while (input);
return 0;
}
代码相对简单易懂,其中的重点是随机数的生成,涉及到以下几个知识点:
rand
函数srand
函数time
函数
2、rand 函数
C 语言中有一个函数叫 rand 函数,使用时需要引用头文件:stdlib.h
,这个函数的作用是生成一个范围在 0 ~ RAND_MAX之间的伪随机数。
例如代码:
无论这个代码运行多少次,打印的结果都是一样的结果,因此rand
函数生成的是一个 伪随机数 而并非 随机数。这是因为rand
函数是对一个叫做“种子”的基准值运算生成的随机数,而种子的默认值为 1 ,因此要真正生成随机数,就需要让这个“种子”是变化的。
3、srand 函数
C 语言中又提供了一种函数:srand
void srand(unsigned int seed);
在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数seed来设置 rand 函数生成随机数的时候的“种子”,只要种子在变化,每次生成的随机数序列也就变化起来了。
4、time 函数
在程序中,我们一般是使用时间作为生成随机数的“种子”的,因为时间是不断在发生变化的,在C 语言提供了一个 time 函数,使用时需要引用头文件: time.h
函数原型是:
time_t time(time_t* timer);
time 函数返回的是1970年1月1日0时0分0秒到现在程序运行时间的差值,单位是秒,返回值的类型是 time_t 类型的,实质是32/64位的整形类型。
time 函数的参数 timer 如果是非NULL
的指针的话,函数也会将这个返回的差值放在 time 指向的内存中带回去。如果 timer 是NULL
,就只返回这个时间的差值。time 函数返回的这个时间差也被叫做时间戳,本文代码中 timer 就是 NULL,返回时间的差值并强制转换成无符号的整形类型。
代码如下:
此时生成的才是真正的随机数。
5、生成随机数的范围
生成 a ~ b 范围的随机数
a + rand() % (b - a + 1)