Hacker_DL 2022-03-05 23:43 采纳率: 16.7%
浏览 66
已结题

C语言 如何连续获取不同的随机数?

我想请教,使用C语言如何产生出不同的随机数?我知道可以拿时间戳作为随机数种子,从而实现随机数。但是,如果在短期运行程序的话,时间很短。时间戳根本不会变,哪怕是播撒了随机数种子,但会因为时间戳来不及变化,导致随机数还是一致的。

所以,我想到使用以下两种方法:
1. 使用windows.h中定义的Sleep()函数;
2. 使用一个超大的空循环。
二者的共同目的是:有意让程序减速进行,让时间戳变化,从而播撒不一样的随机数种子以获取随机值。

不妨用以下代码为例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_ARRAY_SIZE 4

int main() {
    for (int i = 0; i < MAX_ARRAY_SIZE; ++i) {
        srand((unsigned) time(NULL));

        printf("%d", rand() % 10);
    }

    return 0;
}

我这里虽然已经在每一轮的for循环中,_播撒了_随机数种子,但是最终的结果却是如下:

8888
Process finished with exit code 0

加入了睡眠函数以后的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

#define MAX_ARRAY_SIZE 4

int main() {

    for (int i = 0; i < MAX_ARRAY_SIZE; ++i) {
        srand((unsigned) time(NULL));

        printf("%d", rand() % 10);

        Sleep(1000);
    }

    return 0;
}

结果如下:

3692
Process finished with exit code 0

我的问题是,有没有什么方法能够在不影响程序执行效率为前提,又能连续得到不同的随机数呢?

  • 写回答

1条回答 默认 最新

  • 吉拉尔 2022-03-05 23:53
    关注

    种子放在for循环外面不就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月13日
  • 已采纳回答 3月13日
  • 修改了问题 3月5日
  • 创建了问题 3月5日