C语言学习日志
猜数字小游戏:
本文使用的猜数字小游戏主要运用了srand()函数基于系统时间生成随机数的原理;
-----------------------------------------------------------------------------------------------------------
百度百科给出的解释为:
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 。 [百度百科-时间戳]
其实可以粗略的理解为就是某一刻的时间。
时间戳的主要功能就是记录时间,保证数据的客观性,真实性,应用于电子数据长期归档,保存,验证。
本文起到的作用是运用时间戳产生不同随机数,
C语言中用于产生一个随机数的函数。
C 库函数 int rand(void) 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
RAND_MAX位于
![]()
需注意:该函数每次产生的随机数是相同的。
- int ret = 0;
- ret = rand();

C 库函数 void srand(unsigned int seed) 播种由函数 rand 使用的随机数发生器。
参数 seed -- 是一个整型值,用于伪随机数生成算法播种。
需注意:该函数 在使用时,参数seed需要一个随机数才能使得srand()函数产生随机数,若seed参数唯一,则产生的随机数为固定值。所以用【srand(1);】多次产生随机数是不可行的。
srand(1);
因rand()函数和srand()函数产生随机数的限制,我们引入时间戳,也就是本文的核心概念。
这里需要用到
| time_t | 这是一个适合存储日历时间类型。 |
我们可以在vs中写出time_t将其转到定义,可以看到time_t实际是对_time32_t 的重命名

我们进一步将_time32_t 转到定义发现其实time_t本质上是一个长整型

然后我们返回到srand()函数,其有一个格式为void srand(unsigned int seed) ,因此我们仅需将long长整型强制转换为无符号整型即可。
srand((unsigned int)time(NULL));
- #define _CRT_SECURE_NO_WARNINGS
- #include
- #include
- #include
-
- int menu()
- {
- printf("**************************************\n");
- printf("****Welcome to the Numbers Puzzle*****\n");
- printf("***********1.play 0.exit**********\n");
- printf("--------------------------------------\n");
- printf("*******游戏途中退出,请输入101*******\n");
- printf("**************************************\n");
- return 0;
- }
-
- void game()
- {
- //当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0)=(?)秒
- int ret = 0;
- ret = rand() % 100 + 1;//生成1-100随机数
-
- while (1)
- {
- int guess;
- printf("请给出您所猜的数字:>");
- scanf("%d", &guess);
- printf("--------------------------------------\n");
- if (guess == 101)
- {
- break;
- }
- else if (guess > 101)
- {
- printf("请输入1-100之间的数字\n");
- }
- else if (guess > ret)
- {
- printf("猜大了\n");
- }
- else if (guess < ret)
- {
- printf("猜小了\n");
- }
- else
- {
- printf("恭喜你猜对啦!\n");
- break;
- }
- }
- }
- 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("退出游戏\n");
- break;
- default:
- printf("选择错误\n");
- break;
- }
- } while (input);
- return 0;
- }
-