可能重复:
What's the Right Way to use the rand() Function in C++?
我一直在学习如何使用rand()函数,我在C ++中编写了一个小猜谜游戏,如下所示,但问题是,无论编译程序多少次,生成的数字都是相同的 - > 41
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main()
{
int x = rand()%100;
int y=0;
cout << "Ghiceste numarul!" << endl;
cin >> y;
while(y != x) {
if(y > x) {
cout << "Numarul tau este prea mare! Incearca un numar mai mic!" << endl;
cin >> y;
}
if(y < x) {
cout << "Numarul tau este prea mic!" << endl;
cin >> y;
}
if (y == x) {
cout << "FELICITARI, AI GHICIT NUMARUL!\n";
return 0;
}
}
}
我也尝试改变rand()的最大值,只要我把它改为&lt; 41。
有什么想法吗?关于为什么会这样,我没有线索。我正在使用CodeBlocks IDE,我尝试重建(CTRL + F11)
答案 0 :(得分:11)
尝试添加
srand(time(0));
在main
的开头。
答案 1 :(得分:5)
您应首先尝试初始化rand()函数的种子,如下所示:
srand (time(NULL))
在main
的开头。确保在标题
#include <time.h>
或
#include <ctime>
答案 2 :(得分:2)
它可能每次都为随机数生成器使用相同的种子。如果你set the seed of the random number generator每次都有不同的值,你会得到不同的数字。根据文件:
为了生成类似随机数的数字,srand通常被初始化 一些独特的价值,如与执行时间相关的价值。 例如,函数时间返回的值(声明为 标题)每秒都不同,这是足够独特的 对于大多数随机需求。
答案 3 :(得分:0)
您需要将种子传递给rand()函数,该函数在每次运行程序时都会有所不同(例如时间戳)。一般来说,生成真正的随机数是不可能的,但你可以得到一个伪随机数。
答案 4 :(得分:0)
你需要在main
的开头用srand()播种rand函数,通常使用time();功能
答案 5 :(得分:0)
随机数生成器在程序的每次运行中都以相同的默认状态播种。
为了在每次运行中获得不同的结果,您需要通过调用srand()
并传入新的种子来为程序中的随机数生成器播种。通常使用time(NULL)
的返回值作为种子,因为这将保证您在不同的程序运行中获得不同的种子。
所以在main
的开头添加以下内容:
srand(time(NULL));