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

时间:2018-02-24 20:07:59

标签: 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);
}

1 个答案:

答案 0 :(得分:0)

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

srand(time(NULL))将导致所有随机数相同。考虑使用via命令行参数中的数字并使用它来操纵种子。例如:

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 done