1,目的
写这个c语言的猜数字游戏,主要是为了加深一些知识点的理解,同时巩固这些知识点。
1.1 生成随机数
生成随机数使用rand(),不需要传入参数,生成的随机数的范围是[0,32767].需要注意的是,生成的随机数是伪随机数,它们按照一个预定义的算法生成,并且在每次程序运行时以相同的顺序重复。因此需要在使用rand之前,使用srand获取一个随机种子,参数是一个unsigned int,解决掉顺序重复的问题。
1.2时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。使用time函数可以产生时间戳,参数是一个指针,可以使用NULL表示空指针。
1.3rand和srand
在实现猜数字游戏时,不能把srand放在循环里面,如果将srand((unsigned int)time(NULL));
放在循环内部,由于循环的迭代速度非常快,可能在同一秒内执行多次。在这种情况下,time(NULL)返回的值可能是相同的,导致随机数发生器被相同的种子值重新初始化。
2,代码
# include<stdio.h>
# include<stdlib.h>
#include<time.h>
void menu()
{
printf("############################\n");
printf("####### 1.play 0.exit #####\n");
printf("############################\n");
}
void play()
{
int res = rand() % 100 + 1;
int sum = 0;
while (1)
{
printf("请输入猜的数字;\n");
scanf("%d", &sum);
if (sum < res)
{
printf("猜小了\n");
}
else if (sum > res)
{
printf("猜大了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
RAND_MAX;
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请输入选项\n");
scanf("%d", &input);
switch (input)
{
case 1:
play();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}