我正在嘗試在特定范圍內生成亂數。我也在我的程式中使用子行程。
但是,該rand()函式在 for 回圈中生成相同的數字,比如 550,即使我使用srand()
下面是演示代碼:
int main()
{
int count = 5;
int i;
for (i = 0; i < count; i )
{
pid_t pid = fork();
if (pid == 0)
{
// random number between 500 and 700
srand(time(NULL));
int random = rand() % 100 500;
printf("%d\n", random);
exit(0);
}
else
{
wait(NULL);
}
}
return 0;
}
問題出在哪兒?我該如何解決?
任何幫助表示贊賞。
uj5u.com熱心網友回復:
您的程式生成的所有行程都創建得非常快,因此呼叫回傳的值time(NULL)對于所有行程都是相同的。它作為種子傳遞給偽亂數生成器,使其為每個行程生成相同的偽亂數序列。
為了在每個行程中獲得不同的數字,您應該確保每個行程都獲得唯一的種子值。實作此目的的最簡單方法是將計數器添加i到時間值:
srand(i time(NULL));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356312.html
標籤:C
下一篇:如果y==0,如何讓C接受
