我試圖使用循環蘭特()不產生隨機數(時間(NULL))
for (int i = 0; i < Basket.getLemonNum(); i++)
{
lemonWeights[i] = Fruit.generateWeight(fruit, fruitWeight);
cout << lemonWeights[i] << " ";
}
這正好水果類,它的成員函數generateWeight(調用類函數):
int fruitClass::generateWeight(char fruitN, int& fruitW)
{
srand(time(NULL));
int weight = 0;
switch (fruitName)
{
case 'a':
weight = rand() % 500 + 100;
return fruitW = weight;
break;
case 'l':
weight = rand() % 400 + 300;
return fruitW = weight;
break;
case 'w':
weight = rand() % 1000 + 800;
return fruitW = weight;
break;
}
}
Output:
128 128 128 128
但它產生相同數量的時候,甚至當我使用不同的函數來調用它:
for (int i = 0; i < Basket.getWatermelonNum(); i++)
{
watermelonWeights[i] = Fruit.generateWeight(fruit, fruitWeight);
cout << watermelonWeights[i] << " ";
}
Output:
128 128 128
正如你所看到的,我做了種子srand()。 此外,頭文件和包括在內。 發生了什麼事?
[見本](http://stackoverflow.com/questions/7343833/srand-why-call-it-only-once) – Rakete1111
在循環中使用'srand()'可能不太好,在這種情況下* *是錯誤的。 – MikeCAT
儘管在這裏並不重要,但值得注意的是rand()不是一個特別好的僞隨機數生成器。看看像std :: mt19937 –