我有以下代码
#include<iostream>
#include "time.h"
using namespace std;
void printRandomNumber()
{
srand(time(NULL));
cout << rand() % 3;
}
int main()
{
for(int i=0; i<=5; i++)
{
printRandomNumber();
}
system("pause");
}
输出是重复六次的相同数字,我希望打印出数字组合。
答案 0 :(得分:17)
因为每次都播种相同的值 - time
只有二级精度,我非常确定你的计算机可以在一秒钟内处理这六个循环迭代。 ; - ]
种子一次。
答案 1 :(得分:3)
因为肯定你每次都会给同一个种子喂食相同的种子,因为你的循环需要不到1秒的时间。
srand函数只应在程序的生命周期内调用一次。
答案 2 :(得分:3)
您应该在开头使用srand
一次。每个可能的种子对应于一组特定的伪随机数,当使用该种子时,它们总是相同的。因为你的基础是秒,你没有给它时间改变。因此,您每次都会得到同一组数字的第一个数字。
答案 3 :(得分:1)
这是因为你的随机种子本质上是相同的。你有2个解决方案:
您可以将srand(time(0))
放在代码的开头。这将为每个循环生成更好的随机序列。
如果您希望将srand(time(0))
置于main()之外,则可以在功能中将srand(time(0))
替换为srand(rand())
。这将生成随机随机种子,从而产生更好的情况。
答案 4 :(得分:0)
这适用于您的案例
#include<iostream>
#include "time.h"
using namespace std;
// Reset the random number generator with the system clock.
void seed()
{
srand(time(0));
}
void printRandomNumber()
{
cout << rand() % 3;
}
int main()
{
seed();
for(int i=0; i<=5; i++)
{
printRandomNumber();
}
system("pause");
}