rand()随机数生成C ++

时间:2013-08-16 18:14:38

标签: c++ random

我正在尝试使用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函数,返回。请,也不要试图说服我使用命名空间std;这是做坏事的“坏”方式。我知道还有其他方法可以做到这一点。我选择不这样做。

谢谢!

3 个答案:

答案 0 :(得分:5)

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

int danse;

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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