我使用此函数生成随机整数。
int rnd(int min, int max)
{
static int srand(time(0));
return min + rand() % max;
}
是不是?将srand(time(0));
移到主函数可能更好吗?像这样:
int rnd(int min, int max){
return min + rand() % max;
}
int main(){
srand(time(0));
..............
}
答案 0 :(得分:3)
当然。您现在没有调用该函数,而是创建了一个名为srand
的整数变量,它隐藏了全局srand()
。
每次重新播种随机生成器都没有用 - 如果在同一秒内调用它甚至会返回相同的值!在main()
中调用一次会更好。
也应该是min + rand() % (max - min + 1)
。
答案 1 :(得分:3)
您的第一个版本不符合您的要求:
int rnd(int min, int max)
{
static int srand(time(0));
return min + rand() % max;
}
这不会调用函数srand
。它声明了int
类型的静态变量,并为其赋值time(0)
。与int a(42);
一样(或在C ++ 11 int a{42};
中)声明一个整数并将其设置为42
。
绝对使用第二种变体。如果你想要以另一种方式创建随机值的另一个功能,它也会使现场变得更容易。
此外,我强烈建议您使用std::random
(或boost::random
如果由于某些不明原因而不允许使用C ++ 11。)
答案 2 :(得分:1)
一般来说,你只需要初始化伪随机数生成器一次,所以在main函数中是个好主意。
我认为Netscape once had a bug由于经常播种随机数生成器,导致其SSL实施更容易破解。
答案 3 :(得分:1)
是不是?
如果您的意思是“它是否产生随机数?”,答案是是。
如果你的意思是“它是最佳的吗?”然后答案是否。您只需要初始化一次随机数序列。
移动srand可能更好(时间(0));到主要功能
也许......(你知道你需要什么比我们更好)。
你想要实现什么(也就是说,你使用这个随机生成器是什么)?如果它是任何有财务数据,在线赌博应用程序(或任何需要/管理/花钱)的东西,它是不行的(也不是使用srand和rand - 你需要更强的东西)。