【问题标题】:rand() generating same number upon compilation [duplicate]rand()在编译时生成相同的数字[重复]
【发布时间】:2012-03-14 08:31:09
【问题描述】:

可能重复:
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() 的最大值,只要我把它

有什么想法吗?对于为什么会发生这种情况,我没有线索。我正在使用 CodeBlocks IDE 并尝试重建 (CTRL+F11)

【问题讨论】:

    标签: c++ random


    【解决方案1】:

    尝试添加

    srand(time(0));
    

    main的开头。

    【讨论】:

    • 执行此操作,但请注意您只需在程序开始时执行一次。不要每次拨打rand()时都这样做。
    • 并注意警告:如果您每秒运行程序超过一次,它将重复使用随机种子(并且每次运行程序时都会给您相同的数字,直到第二次通过)。
    • 两个优点。请务必查看 tenfour 对您的问题的评论中引用的 SO 帖子。
    【解决方案2】:

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

    srand (time(NULL))
    

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

    #include <time.h>
    

    #include <ctime>
    

    【讨论】:

      【解决方案3】:

      可能每次随机数生成器都使用相同的种子。如果你set the seed of the random number generator 每次设置不同的值,你会得到不同的数字。根据文档:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          所以在main开头添加以下内容:

          srand(time(NULL));
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-11-03
              • 2017-07-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多