我想请教,使用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
我的问题是,有没有什么方法能够在不影响程序执行效率为前提,又能连续得到不同的随机数呢?