关于循环内srand(time(NULL))问题求解

故秋最好 2022-05-22 02:04:46

我已经了解rand生成的数组与srand初始化种子的关系,但是当我将srand放在循环内的时候,为什么在长时间运行中srand的种子依然没有变化呢?

int result_rand(int x)
{
	//srand(time(NULL));    //mark 1 
	int count;
	int using_s;
	int rest, passby;  //定义为局部变量会分层保存值,用于中转每次剩余材料数与生成材料数
	if (x >= 3)
	{
		passby = x / 3;
		rest = x % 3;
		for (count = 0; count < passby; count++)
		{
			srand(time(NULL));    //mark 2
			using_s = rand() % 100 + 1;
			if (using_s <= 25)
				rest++;
		}
		ans = passby + result_rand(rest);
		return ans;
	}
	else
		return 0;
}

 该代码如上;当我在循环外srand时(即mark 1 处),随机数是正常的;但是在循环内srand(mark 2 处)时rand并不会随着时间变化而发生变化,想知道这是为什么(即为什么循环内的time(NULL)并没有因为程序运行时间的延长而发生变化)。

...全文
147 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever74 2022-05-22
  • 打赏
  • 举报
回复

很有可能您的程序运行的速度超过了time()的精度。

forever74 2022-05-22
  • 举报
回复
@forever74 我是说time()的值是秒,您的循环一转起来哪儿能用得了1秒呢?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧