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

rand() generating same number upon compilation

本文关键字:数字 编译 rand      更新时间:2023-10-16

可能重复:
什么';在C++中使用rand()函数的正确方法是什么?

我一直在学习如何使用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()的最大值,只要我把它<41.

有什么想法吗?我不知道为什么会发生这种事。我正在使用CodeBlocks IDE,并尝试重建(CTRL+F11)

尝试添加

srand(time(0));

在CCD_ 1的开始。

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

srand (time(NULL))

在CCD_ 2的开始。确保在标题中包含时间.h

#include <time.h>

#include <ctime>

它可能每次都为随机数生成器使用相同的种子。如果每次都将随机数生成器的种子设置为不同的值,则会得到不同的数字。根据文件:

为了生成类随机数,srand通常被初始化具有一些独特的价值,比如与执行时间相关的价值。例如,函数time(在header)每秒都不同,这就足够与众不同了满足大多数随机化需求。

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

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

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

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

srand(time(NULL));

您需要在main的开头使用srand()为rand函数播种,通常使用time();函数