Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言运行rand()并使用Shell脚本循环_C_Shell_Random - Fatal编程技术网

用C语言运行rand()并使用Shell脚本循环

用C语言运行rand()并使用Shell脚本循环,c,shell,random,C,Shell,Random,我有一个C代码文件调用test.C,输出为test.out,如下所示,只是一个简单的随机数输出: 现在我使用shell脚本在Linux中运行test.out 5次,代码如下: for i in 1 2 3 4 5 do test.out done 但结果如下所示 0.840188 0.840188 0.840188 0.840188 0.840188 它显示相同的随机数。使用当前时间初始化伪随机生成器。在大多数平台上,time函数以秒为单位返回当前时间。如果您在一秒钟内多次运行此程序

我有一个C代码文件调用test.C,输出为test.out,如下所示,只是一个简单的随机数输出:

现在我使用shell脚本在Linux中运行test.out 5次,代码如下:

for i in 1 2 3 4 5
do
    test.out
done
但结果如下所示

0.840188
0.840188
0.840188
0.840188
0.840188

它显示相同的随机数。

使用当前时间初始化伪随机生成器。在大多数平台上,time函数以秒为单位返回当前时间。如果您在一秒钟内多次运行此程序,那么您将在所有执行中设置相同的种子,并获得相同的随机数

例如,在脚本的循环中添加sleep 1,您将看到不同的结果。

rand将为同一种子生成与您使用srand设置的种子相同的数字序列

很可能您的循环运行得太快,所有运行都使用相同的种子,即timeNULL返回相同的值。因此,您可以看到相同的输出

您可以拖动48来生成均匀分布的数字。或者,如果您只是想测试rand,您可以在迭代之间添加一个延迟

for i in 1 2 3 4 5
do
    test.out
done

在同一秒内执行程序5次,由于使用系统时间(秒)作为rand函数的种子,自然会得到相同的结果。如果在执行之间等待一秒或更长时间,则会得到不同的值。

或者只使用时间以外的值,如srandtimeNULL^getpid*40499;从理论上讲,由于PIDs的重用,它可能仍然会以相同的序列号结束。但在实践中,它基本上是有效的。太棒了!它起作用了!在实践中,是否有任何理论方法可以工作?这需要在一秒钟内重复使用PID,这是非常不可能的。不过,我承认,这并非不可能。
for i in 1 2 3 4 5
do
    test.out
done