题目:
通过程序随机一个1-100的数,用户通过键盘输入数字 看是否匹配,匹配成功则跳出循环,失败则继续循环。
思路:
- 然后生成一个随机数
- 需要写成死循环,同时需要有其他的出口
- 可以写一个提示,比如输入的数字较大/较小
涉及知识:rand()、srand()函数和time()函数
time()函数:
会返回系统的当前日历时间,自 1970 年 1 月 1 日以来的秒数。如果系统没有时间,则返回 -1。该返回值也被称为 Unix 时间戳。
time(NULL):
获取当前时间,以秒为单位,从1970年1月1日(即UNIX纪元)开始计算。
区别:
如果你传递一个指针,那么time()
函数会把当前的时间戳写入这个指针指向的内存位置,并 且返回这个时间戳。
如果你传递NULL,那么time()
函数不会尝试写入任何东西,只会返回当前的时间戳。
如果非要形象的解释:可以想象成time()
和time(NULL)
都是时间的魔术师。他们都可以告诉你从1970年1月1日到现在已经过去了多少秒。他们的区别在于,time()
喜欢与人互动,他希望你给他一个空间,他可以在那里写下他的答案。你可以把这个空间想象成一个空白的纸条,你把纸条给time()
,然后time()
会在纸条上写下答案,并把纸条还给你。而time(NULL)
则更喜欢单独工 作,他不需要你给他任何东西,他只是静静地告诉你答案,就像一个神秘的预言家。这就是 time()
和time(NULL)
的区别,他们都是时间的魔术师,只是他们的表演方式略有不同。
srand()函数:
是一个随机数种子,如果不使用srand()函数,而直接使用rand()函数,那么,每次生 成的随机数都会是一样的
同时,srand()函数中不能给一个固定的值,否则 rand()函数中的随机数会一直是同一个 数
rand()函数:
rand()函数会根据随机数种子(srand()函数 )来获取一个随机数
代码:
int main() {/**产生随机数1.导入头文件 time.h stdlib.h时间的开始是从1970/01/01 00:00:00 开始 和现在当前时间的一个差值2.添加随机数种子若不添加随机数种子,那么每次生成的随机数都会是一样的3.获取随机数**/srand((unsigned int)time(NULL));//先将time函数的返回类型转换成无符号类型,在生成一个随机数 种子,使每次随机数不一样/**for (int i = 0; i < 10; i++) {会生成10个随机数int value = rand() % 10;//生成一个0-9的随机数,赋值给value 取余的值不会大于除的值printf("%d\n", value);}**/int value = rand() % 100;int num;for (;;) {printf("请输入数字\n");scanf("%d", &num);if (num>value) {printf("输入的数字较大\n");}else if(num < value) {printf("输入的数字较小\n");}else {printf("正确");break;}}return 0;
}
解释:
srand((unsigned int)time(NULL))
现在我们开始拆解:
- time(NULL):用于获取当前的系统时间,表示为从 1970 年 1 月 1 日(即 UNIX 纪元)以来的秒数。
- (unsigned int):将time_t类型(time()的返回值类型)转换成一个无符号整型
- srand():用以生成一个随机数种子
- 所以srand((unsigned int)time(NULL)):这行代码的作用是用当前的系统时间作为种子来设置随机数生成器。由于系统时间是持续变化的,所以每次运行程序时,种子都会不同,生成的随机数序列也就会不同。
结果:
第一次运行:
第二次运行:
第三次运行
这篇的重点在于随机数和随机数种子,如果有不懂可以留言或评论,看见了会回