我希望该程序生成4个随机数组成的4个不同序列。该程序当前为每个系列输出相同的数字。知道发生了什么吗?我认为它与种子有关,但我不知道到底是什么。
#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;
}
答案 0 :(得分:1)
之所以发生这种情况,是因为time(NULL)以秒为单位返回UNIX时间戳。现在,外部for循环中的每个循环执行的时间都少于一秒。因此,srand(time(NULL))本质上将种子设置为与每个循环相同。我建议采取srand(time(NULL));跳出循环,您会没事的。像这样:
#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;
srand(time(NULL));
//interates through 4 sequences
for(int i = 0; i < 4; i++ )
{
//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;
}