当我多次运行程序(在C中)时,它总是选择相同的随机数

ryan123

因此,我的程序实际上是DPLL SAT求解器,因此在程序内部需要选择随机变量以将TRUE或FALSE分配给它。如果我运行一次程序,它将正常工作;如果再次运行,它将选择不同的变量,并且仍然有效(这是我想要的)。

但是,为了进行可靠的实验,我需要重复运行程序。可以通过分别多次运行该程序来完成此操作,但这很繁琐并且会花费很长时间。我已经学会了如何使用bash,如下所示:

#!/bin/bash 

for ((i=50; i>0; i--))  
do  
./Project 90 10 >> outfile.txt 
done

但是,完成此操作后,每次运行都会以相同的顺序选择相同的“随机”变量,因此会产生相同的结果。如何使我的程序每次都以不同的方式运行?

谢谢!!

伊哈罗布·阿西米(Iharob Al Asimi)

您需要初始化随机数种子,随机数不是真正的随机数,请将其添加到您的 main()

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

int main(int argc, char **argv)
{
    srand(time(NULL)); /* here at the very beginnig of main */
    .
    .
    .
    return 0;
}

每次执行程序时,这都会产生不同的种子,因为time(NULL)它将返回不同的值。

阅读以获得更多信息。

注意:如Ingo Leonhardt所评论,效果将是相同的,因此请尝试此选项

#include <stdlib.h>
#include <sys/time.h>

int main(int argc, char **argv)
{
    struct timeval tv;
    gettimeofday(&tv, NULL);

    srand(tv.tv_usec); /* here at the very beginnig of main */
    .
    .
    .
    return 0;
}

或者,因为每个过程都会有所不同,所以pid这也可能有效1

#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    srand((int)getpid()); /* here at the very beginnig of main */
    .
    .
    .
    return 0;
}

1这是POSIX解决方案,如果需要,可以研究不支持POSIX的操作系统的等效功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C中的复数程序,当我运行程序时,复数词后面有一堆随机的东西

在python中,当我尝试选择随机数时,如何确保使用randint的种子不断变化?

为什么每次运行程序时math / rand软件包中的rand.Intn()函数都会生成相同的随机数序列?

我的随机数生成器总是得到相同的数字?(C++)

当我运行程序时,结果相同

当我在脚本中运行程序时,为什么rand()返回相同的值?

每当我发送 msg 时,它都会在反应中多次显示相同的消息

当我使用free()时,C中的程序随机崩溃

当我运行程序JPA不在MySQL中创建表时

为什么有时当我在终端中运行程序时,却无法在终端中运行?

如何理解 C++ 入门 5 中的“给定的随机数生成器总是产生相同的数字序列”?

为什么我的递归函数总是使用相同的随机数?

为什么我的随机发生器在我运行程序时显示相同的数字?

当我在模拟器中运行它时,应用程序不断崩溃

当我在真实设备 iOS 中运行它时应用程序崩溃

每当我在 Python Shell 中运行程序时,我都会收到一行 RESTART: C:\... $

在并行程序中播种随机数生成器

在Inno Setup中以随机数作为参数执行程序吗?

当我从 android studio 运行它时,我的应用程序运行良好,但在 google play 中不起作用

当我运行 springboot 应用程序时,它总是从错误的路径加载属性

我想创建一个C ++程序以将随机数生成到文件中

我的 while 循环不起作用。当我运行它时,它总是给我无限的输出

在计算 C 文件中的字数时打印随机数的程序

C程序中的随机数生成器未生成正确的随机数

当我运行程序时,它引发错误,并且在vs代码中给出“ error:location.condition is not callable”

我的C ++随机数不是随机的

如何在python中生成新的随机数,而无需再次运行程序或添加新变量?

不在循环中多次生成相同的随机数

当我运行程序时,我发现在 mQTextedit 中单击时光标无法移动,