rand()每次运行程序时都返回相同的数字
rand() returns the same number each time the program is run
在这个相当基本的涉及随机数生成的C++代码片段中:
include <iostream>
using namespace std;
int main() {
cout << (rand() % 100);
return 0;
}
为什么我总是得到41的输出?我正试图让它输出一些0到100之间的随机数。也许我不了解rand函数是如何工作的?
您需要更改种子。
int main() {
srand(time(NULL));
cout << (rand() % 101);
return 0;
}
这个srand
也适用于C.
另请参阅:http://xkcd.com/221/
就其价值而言,您也只生成0到99(包括0和99)之间的数字。如果您想要生成0到100之间的值,则需要。
rand() % 101
除了其他人提到的调用srand()之外。
srand()
为随机数生成器种子。如果没有种子,生成器将无法生成您要查找的数字。只要对随机数的需求不是安全关键的(例如,任何类型的密码学),通常的做法是通过使用<ctime>
库中的time()
函数来使用系统时间作为种子:srand(time(0))
。这将用Unix时间戳(即自1970年1月1日起的秒数)表示的系统时间为随机数生成器种子。然后可以使用rand()
生成一个伪随机数。
这里引用了一个重复问题:
原因是rand()函数生成的随机数不是实际上是随机的。这只是一种转变。维基百科提供了更好的伪随机数发生器意义的解释:确定性随机位生成器。每次调用rand()时,都会获取种子和/或生成的最后一个随机数(C标准没有指定算法使用,尽管C++11有指定一些流行算法的功能)对这些数字进行数学运算,并返回结果。所以如果种子状态每次都是一样的(如果你没有用true调用srand随机数),那么你总是会得到相同的"随机"数。
如果你想了解更多,你可以阅读以下内容:
http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
http://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/
您没有对数字进行种子设定。
使用此:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));
cout << (rand() % 100) << endl;
return 0;
}
不过,你只需要播种一次。基本上不要把每个随机数都作为种子。
像borland complexer 这样的随机函数
using namespace std;
int sys_random(int min, int max) {
return (rand() % (max - min+1) + min);
}
void sys_randomize() {
srand(time(0));
}
"srand(时间(NULL))"作为第1行;main()"如果你使用";rand()"在静态初始化时。在某处你最好创造";结构体rnd_init{rnd_init(){srand(time(nullptr));}}"命名任何适合你的,作为一个静态var,在其中";rand()"正在使用:在某个构造函数中,或者其他什么。
- 函数如何使用引用返回所需的数字?
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- C++ python 中的函数返回数字而不是字符串
- 使用非托管导出将字符串从 C# 返回到C++将返回数字
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 将 MPFR 数字转换为字符串并返回
- C++ 递归:返回数字的最小偶数
- typeid.name 返回派生类类型之前的数字
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- 为什么我的阶乘数查找器返回以C++输入的数字?(已编辑)
- 将字符转换为ASCII返回数字太大
- 从排序的数字数组中返回数字范围的最快方法是什么?
- 使用关键字从文本文件返回数字
- 将元组传递给函数并让它返回数字列表的最佳方法
- placeNumbers应该返回数字的顺序,以便满足布尔值向量中编码的条件
- 带有Overload[]运算符的C++MyInteger类,因此索引在位置i返回数字
- c++程序返回数字而不是字符
- 返回数字所在的行