【问题标题】:rand() Random Number Generation C++ [duplicate]rand() 随机数生成 C++ [重复]
【发布时间】:2013-08-16 18:14:38
【问题描述】:

我正在尝试使用rand() 函数生成伪随机整数。它有效,但我的问题是它总是为int“选择”相同的名称。 (在这种情况下,它是 41。我认为如果你将 rand() 放在 main 的 while 循环中,它是 85 或其他东西。)

有没有办法解决这个问题?这是我的代码:

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>

    int guess;
    int danse = rand() % 101;

    using namespace std;

    void more(){
    cout << "The number that you need to guess is higher!";

    return;
    }

    void lower(){
    cout << "The number that you need to guess is lower!";

    return;
    }

    int main(){
    while(1){
    cout << "\nGuess a number 0-100: ";
    cin >> guess;

    if (guess > danse){
        lower();
}
    if (guess < danse){
        more();
}

    if (guess == 101){
        break;
}

    if (guess == danse){
        cout << "\nYOU GUESSED IT. ARE YOU A WIZARD?! BECAUSE THAT IS PRETTY NEAT.";
        break;
}
    }
    }

只是一些旁注:请不要试图告诉我我已经知道的事情,比如解释我为什么使用带返回的 void 函数。也请不要试图说服我 using namespace std;是“坏”的做法。我知道还有其他方法可以做到这一点。我选择不这样做。

谢谢!

【问题讨论】:

标签: c++ random


【解决方案1】:

在使用rand 之前,您需要调用一次srand 来为随机数生成器播种。当前时间是选择在程序运行之间变化的种子的一种廉价且简单的方法。

int danse;

int main(){
    srand(time(NULL));
    danse = rand() % 101;

【讨论】:

    【解决方案2】:

    rand() 生成一个伪随机序列,从给定的开始 种子。对于任何指定的种子,以下所有值将 是相同的。默认情况下,种子为 1。

    为了在每次运行程序时获取不同的值, 你需要给生成器播种(使用srand()) 从用户的角度来看,这似乎是随机的。最好的 Unix 机器上的解决方案是从 "/dev/random" 创建一个 int,并使用它。在其他 系统,你必须找到别的东西; time( NULL ) 是 经典的解决方案,但当然,如果程序启动 在同一秒内多次(即使在不同的机器上), 它将输出相同的序列。散列附加值, 比如进程ID,机器的IP地址等等, 会大大改善情况。

    最后:一些生成器会将种子作为第一个返回 价值。这是非常可预测的,特别是如果您只是使用 time( NULL )。您可能想要生成几个 在实际开始之前丢弃的随机值 使用它们。

    【讨论】:

      【解决方案3】:

      您没有看到随机数生成器,因此每次运行应用程序时它都会为您提供完全相同的“随机”数集(这对于调试很有用)。要修复它,请将您的 main 修改为如下所示:

      int danse = 0;
      int main()
      {
          std::srand(std::time(0)); // seed the random number generator
          danse = rand() % 101;
          // rest of your main
      }
      

      【讨论】:

      • 那不行,因为他已经事先初始化了danse
      • 啊,在声明中没有看到他这样做...我将其添加到示例代码中。
      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多