C语言如何清除所有内容?调用shor.exe十次随机数重复问题求助
解决shor.exe多次运行随机数相同的问题
嘿,这个坑我踩过!你遇到的根本不是“程序没重置变量”的问题——毕竟每次system("shor.exe 15")都会启动一个全新的独立进程,每个shor.exe的内存空间都是完全隔离的,父进程的状态不会影响它们。真正的问题出在shor.exe自身的伪随机数生成器(PRNG)初始化上。
为什么随机数会重复?
C语言里的rand()函数默认是用固定种子(通常是1)来生成随机序列的。如果shor.exe里没有在使用rand()之前调用srand()设置一个变化的种子,那不管你运行多少次,它生成的随机数序列都会完全一模一样——哪怕是不同的进程实例也不例外。
怎么解决?
最靠谱的办法是修改shor.exe的代码,给随机数生成器设置一个随时间变化的种子:
#include <stdlib.h> #include <time.h> int main() { // 用当前系统时间作为随机种子,确保每次启动种子都不一样 srand((unsigned int)time(NULL)); // 之后再调用rand()生成随机数 int random = rand(); // 你的其他代码逻辑... return 0; }
如果你的shor.exe运行速度特别快(比如一秒内就能跑完好几次),time(NULL)返回的秒数可能会重复,这时候可以用更高精度的时间来做种子:
- Linux下可以用
gettimeofday()获取微秒级时间 - Windows下可以用
QueryPerformanceCounter()获取高精度计时器值
要是你没法修改shor.exe的代码,那只能退而求其次,在父进程的循环里每次调用前加个短暂延迟(比如sleep(1)),但这只是临时 workaround,不推荐作为长期解决方案。
内容的提问来源于stack exchange,提问作者Robbe Motmans
相关产品推荐
相关产品推荐

