c - Bash 脚本和 C 程序表现得很奇怪

标签 c bash

所以,我的c程序在插入N个随机数后将打印出二叉搜索树的深度,我想运行它500次并将结果保存在文本文件中。

编译后,gcc -Wall myProgram main.c. 我尝试了 ./myProgram 并且每次都会返回不同的结果 9012,9023,9231,9523,9533... ,但是一旦我使用 bash 循环

for i in {1..500} do ./myProgram >> text.txt done

它总是返回 500 个相同的数字。我最初以为我的 C 程序有问题,但是当我在 IDE 上运行它或仅运行一次时就没有问题

我忘了提及我的 C 程序使用 time.h 来生成随机数,这可能是问题所在吗?

srand(time(NULL));

T = Initialize();
T = MakeEmpty(T);

int array[N];

for (int i = 0; i < N; i++) {     // fill array
    array[i] = i;
}

for (int k = 0; k < N; k++) {    // shuffle array
    int temp = array[k];
    int randomIndex = rand() % N;
    array[k]           = array[randomIndex];
    array[randomIndex] = temp;
}

for (j = 0; j < N; j++){
    //printf("%d\n", array[j]);
    T = Insert(array[j], T);
}

最佳答案

如果此语句在同一秒内运行,

srand(time(NULL)) 将导致所有随机数相同。考虑通过命令行参数获取一个数字并使用它来操作您的种子。例如:

int main(int argc, char **argv)
{
    int entropy;
    if(argc != 2)
    {
         srand(time(NULL));
    }
    else
    {
         entropy = atoi(argv[1]);
         srand(time(NULL) + entropy);
    }
    //... rest of code ...
}

然后你的 bash 脚本代码会执行类似的操作:

for i in {1..500} do ./myProgram i >> text.txt did

关于c - Bash 脚本和 C 程序表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967098/

相关文章:

c - 从 GPSD 检索数据,无需等待时间

c - “Control may reach end of non-void function”错误消息

c - 混合 exe 静态编译的不同版本的库 w/共享内存

macos - OSX 庆典 "sleep"

bash - 如何定义函数名称 "pattern"的完成?

c - 如何使用元循环求值器引导 Lisp 解释器

c - 为什么我的 C 程序在第二次调用函数时崩溃?

regex - GNU sed 无法匹配组合字符串中的最后一个换行符

linux - 我的 linux bash 脚本不会遍历所有文件

bash - 如何增加属性文件中的数值