此问题已在此处有答案:
srand() — why call it only once?(7个回答)
4年前关闭。
我想这个程序产生4个不同的系列4随机数。程序当前为每个系列输出相同的数字。知道发生什么事了吗我想这和种子有关,但我不知 prop 体是什么。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int lotArr[6];
int j = 0;
int k = 0;
int m = 0;
int n = 0;
int i = 0;
bool crit = false;
//interates through 4 sequences
for(int i = 0; i < 4; i++ )
{
srand(time(NULL));
//generates each number in current sequence
for(m = 0; m < 4; m++)
{
lotArr[m] = rand() % 30 + 1;
}
//output
for(n = 0; n < 4; n++)
{
cout << lotArr[n] << " ";
}
cout << endl;
}
return 0;
}
1条答案
按热度按时间zz2j4svz1#
这是因为time(NULL)以秒为单位返回UNIX时间戳。现在你的每一个外部for循环的执行时间都大大少于一秒。因此,srand(time(NULL))本质上在每个循环中设置相同的种子。我建议使用srand(time(NULL));你就没事了就像这样: