下边是我在听B站比特鹏哥课时做的一些笔记,其中注释是我对时间戳的理解
这是一个猜数字游戏
电脑随机生成一个数,然后猜,电脑会显示猜大还是猜小,之后继续直到猜对
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//自定义函数可以先不看,在主函数运行中出现自定义函数再返回来看
void menu()
//void表示menu这个自定义函数不用返回任何值
{
printf("**************************************\n");
printf("*** 1.go 0.exit ***\n");
printf("**************************************\n");
}
void game()
{
/*三个步骤,生成随机数,猜数字,比较*/
int bet = 0;
int num = 0;
bet = rand()%100+1;//第一步结束
while(1)
{
printf("guess it:\n");
scanf("%d",&num);
if(num > bet)
{
printf("too large\n");
}
else if(num < bet)
{
printf("too small\n");
}
else if(num == bet)
{
printf("yes!\n");
break;
}
}
}
int main()
{
/*
程序设计时我们了解一下概念
首先是随机数函数,其次是时间戳
rand函数最大值RAND_MAX是7ff(32767),它的库文件是stdlib.h
但同时,rand函数是有规矩的
需要使用srand函数来设置随机起点
如果不设置起点,那么每次游戏过程中运行的结果虽然不一样但是每个游戏过程生成的随机值一样
但当我们设置起点时,比如srand(1),发现每次都输出相同的的结果
因此srand是根据后边的整形数字来生成随机数,rand只会随着srand后边的数字的变化而变化
我们把时间作为种子来赋值给srand,让srand随着时间的变化而发生变化
这就叫做时间戳
当前计算机的起始时间是1970.1.1.0:00单位是秒,时间戳就是当前时间与起始时间的差值,它随着时间的变化而发生变化
我们使用time函数,这个函数可以读取现在的时间戳,返回一个time_t型的数据
time_t本质上是一个长整型ld,我们把它强制转换成整型,这样就可以作为变化的整型量赋值给srand
time函数后边我们不想让他产生效果,只是作为一个变化的量,所以给他一个空指针time(NULL)
注意
1.time函数的头文件是time.h
2.srand在整个工程中设置一次就好了,不然时间戳相隔太近会不随机,所以这里我们把它放在主函数中
3.由于rand范围太大,我们把它取100的模,缩小范围
*/
srand( (unsigned int) time(NULL));//设置起点,给unsigned int加个括号就是强制转化
int in = 0;
do
{
menu();
printf("input:\n");
scanf("%d",&in);
switch(in)
{
case 1:
game();//这个函数先写上后定义
break;
case 0:
printf("exit\n");
break;
default:
printf("wrong\n");
break;
}
}while(in);//这里表示,当输入的值为0时游戏自动终止,非0时游戏一直持续
return 0;
}