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

时间:2012-02-23 21:17:59

标签: c++ random

  

可能重复:
  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)

6 个答案:

答案 0 :(得分:11)

尝试添加

srand(time(0));

main的开头。

答案 1 :(得分:5)

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

srand (time(NULL))

main的开头。确保在标题

中包含time.h
#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));