代码之家  ›  专栏  ›  技术社区  ›  Dongho Han

Bash脚本和C程序运行异常[重复]

  •  0
  • Dongho Han  · 技术社区  · 8 年前

    因此,我的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程序使用时间。对于随机数生成,这可能是问题所在吗?

    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 回复  |  直到 8 年前
        1
  •  0
  •   afic    8 年前

    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 done