所以,我的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/