思路与步骤
设计这个猜数字游戏,我们先要电脑去生成一个随机数,然后再用我们输入的数与随机数相比较
如果我们输入的数小于随机数,则输出猜小了,如果我们输入的数大于随机数,则输出猜大了,
如果我们输入的数等于随机数,那么输出恭喜你,猜对了。
第一步:生成一个随机数
第二步:判断输入的数与随机数的大小
代码的实现
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//猜数字
//先生成随机数
//然后比较,如果输入值比生成的随机数小,则提示猜小了
//如果输入值比生成的随机数大,则提示猜大了
//如果输入值比生成的随机数相等,则恭喜你,游戏结束了
void menu()
{
printf("******************************\n");
printf("******* 0.exit ******\n");
printf("******* 1.play ******\n");
printf("******************************\n");
}
void game()
{
//生成随机数
int ret = rand() % 100 + 1;//任何数%100->0-99 %100+1->1-100
//使用rand函数需要调用srand函数,在srand函数中我们用时间戳参数,时间戳在不停的变化,这样生成的随机值才是随机的。
// rand函数是一个伪随机数生成函数
// rand函数生成的随机数的范围是0- RAND_MAX(32767)
printf("%d", ret);
//猜数字
int guees = 0;
int count = 1;
while (count)
{
printf("请输入>:");
scanf("%d", &guees);
if (guees < ret)
{
printf("猜小了\n");
}
else if (guees > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
count++;
if (count == 4)//设置次数,如果三次还没有猜对,那么游戏就结束了
{
printf("输入次数已用完,游戏结束\n");
break;
}
}
}
int main()
{
int input = 0;
//因为time函数的返回类型是time_t,但是srand函数的参数类型是unsigned int,所以需要强制转换一下
srand((unsigned int)time(NULL));//用一个时间戳来生成一个随机值
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input)
{
case 0:
printf("游戏结束\n");
break;
case 1:
game();
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
注意事项
rand函数与srand函数和time函数
rand函数
rand函数是一个产伪随机数的函数
rand函数产生随机数有范围1-RAND_MAX(32767)
rand函数在生成随机数前,要使用srand函数设置随机数的生成器
rand函数返回的数据类型是整型,无参数。
srand函数
没有返回类型,参数的类型是unsigned int类型
在使用rand函数之前需要调用srand函数来设置随机数,从而使rand函数生成随机数
如果设置的数是唯一的那么rand函数生成的随机数也是唯一的,所以我们这用时间戳设置
time函数
用到时间戳,在c语言中time函数可以实现这个功能。
在这个函数中返回的数据类型是time_t参数是time_t* 的指针
什么是时间戳,我们先看下邮戳
邮戳:邮戳是邮局盖在实寄过的邮件包裹等上的各类戳记,每一个邮戳代表的是每一种的信件。
时间戳:一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
说白了就是时刻,不断变化的时间。