问题描述
系统产生一个100以内的随机数,玩家来猜,输入一个值,系统提示猜大或猜小直到猜准为止
解决方案
产生随机值需要调用rand函数,查阅MSDN rand函数返回的是一个随机整数,范围是0到RAND_MAX 而RAND_MAX是一个16进制数字,为0x7fff,转化为十进制为32767,也就是短整型的最大值 调用rand函数之前需要调用srand函数,否则每次生成的随机值都是一样的这样游戏只能玩一次,是系统生成的伪随机值
对rand函数的解释
对srand函数的解释 设置一个随机值起点 参数的类型为无符号整型
因此我们要使每次游戏的随机值都不一样就要让每次随机值的起点不断变化,所以我们用时间作为起点(time函数)
对time函数的解释 获取一个系统时间 返回值为time_t 参数类型为指针类型
对time_t的解释 typedef 使重命名的意思 time_t实际上是__time64_t 而_time64_t是一个64位的整型,因此time_t 返回的是一个整型即time返回的也是一个整型,所以调用srand函数时将time强制类型转换成无符号整型就可以使用了
time函数返回的是此时刻与计算机起始时间的一个差值,计算机起始时间为1970年1月1日0分0时0秒
代码实现
void game()
{
int ret = 0;
int num = 0;
ret = rand() % 100 + 1;
while (1)
{
printf("请猜数字\n");
scanf("%d", &num);
if (num == ret)
{
printf("猜对了\n");
break;
}
else if (num > ret)
{
printf("猜大了\n");
}
else
printf("猜小了\n");
}
}
void menu()
{
printf("*************** 1.play ************\n");
printf("*************** 2.exit ************\n");
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜字游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("请重新选择\n");
break;
}
} while (input);
return 0;
}
|