私はその後、私は乱数を生成するためにスクリプトでプログラムを実行すると、rand()が同じ値を返すのはなぜですか?
*pos_x = (rand() % HEIGHT);
*pos_y = (rand() % WIDTH);
をやって、実行の開始時にsrand(time(NULL))
を持っています。私は手動で私のプログラムを実行したときにこれが正常に動作します
が、このスクリプトで、私は昼食私のプログラムを:
#!/bin/bash
i="0"
team_number="0"
while [ $i -lt 30 ]
do
./lemipc `pwd` team_number
i=$[$i+1]
if (($i % 10 == 0))
then
team_number=$[$team_number+1]
fi
echo "create process $i"
usleep 10000
done
私は常にすべてのプロセスのために同じ番号を取得します。
私はさらにこれを修正するために休憩を追加しようとしましたが、それでも動作しません。 私はexempleのためにこれを取得する:
97 51
create process 1
97 51
create process 2
97 51
create process 3
97 51
97がPOS_Xで
と51 POS_Y。
なぜでしょうか?
おそらく、プログラムが非常に高速に実行されるため、毎回同じ値を返す 'time'が発生するでしょうか? 'time'はUNIX時代が始まってからの経過秒数を返します。もしあなたのスクリプトが全てを1秒未満にするならば、大きなチャンスがあります。同じ値になります。 – ach
問題を再現するのに必要な最小限のプログラムコード[mcve]を投稿できますか? – Angew
値 'time(NULL)'を出力しないのはなぜですか?多分同じ値がすべてのプロセスに出力されます。同じシードに対して、srandは常に同じ数値シーケンスを生成します。 – Alanmars