C++ rand()在编译时生成相同的数字

C++ rand()在编译时生成相同的数字,c++,random,C++,Random,可能重复: 我一直在学习如何使用RAND()函数,我在C++中写了一个小猜谜游戏,但问题是,不管我编译多少次程序,生成的数字都是一样的-> 41 #include <iostream> #include <cstdlib> #include <conio.h> using namespace std; int main() { int x = rand()%100; int y=0; cout << "Ghiceste

可能重复:

我一直在学习如何使用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;
      }
    }
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int x=rand()%100;
int y=0;
库蒂;
而(y!=x){
如果(y>x){
库蒂;
}
if(y
srand(time(0));

main

的开头,它可能每次都对随机数生成器使用相同的种子。如果每次都使用不同的值,则会得到不同的数字。根据文档:

为了生成类随机数,srand通常被初始化 对于某些特定的值,例如与执行时间相关的值。 例如,函数time(在中声明)返回的值 页眉)每秒钟都不同,这已经足够独特了 对于大多数随机需求


您需要向rand()函数传递一个种子,该种子在程序每次运行时都会不同(例如,时间戳)。一般来说,生成真正的随机数是不可能的,但可以得到一个伪随机数。

您应该首先尝试初始化rand()函数的种子,如下所示:

srand (time(NULL))
main
的开头。确保在标题中包含time.h

#include <time.h>
#包括

#包括

您需要在
main
的开头使用srand()对rand函数进行种子设定,通常使用time();function

随机数生成器在程序每次运行时都以相同的默认状态进行种子设定

为了在每次运行中获得不同的结果,您需要在程序中通过调用
srand()
并传入新种子来为随机数生成器设定种子。通常使用
time(NULL)
的返回值作为种子,因为这将保证在程序的不同运行中获得不同的种子

因此,在
main
的开头添加以下内容:

srand(time(NULL));

执行此操作,但要注意,您只需要在程序开始时执行一次。不要每次调用
rand()
。还要注意一点:如果您每秒运行程序超过一次,它将重复使用随机种子(并且每次运行程序时都会给出相同的数字,直到第二次通过)。两个观点都很好。请务必查看tenfour对您的问题的评论中引用的SO帖子。
srand(time(NULL));