rand()随机数生成C++

rand() Random Number Generation C++

本文关键字:C++ 随机数 rand      更新时间:2023-10-16

我正在尝试使用rand()函数生成伪随机int。它是有效的,但我的问题是它总是为int"选择"相同的名称。我认为,如果你把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;
}
    }
    }

只是一些旁注:请不要试图告诉我我已经知道的事情,比如解释我为什么使用带return的void函数。请,也不要试图说服我使用命名空间std;是做这件事的"坏"方法。我知道还有其他方法。我选择不这样做。

谢谢!

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

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

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

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

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

您没有看到随机数生成器,因此每次运行应用程序时,它都会给您一组完全相同的"随机"数(这对调试很有用)。要修复它,请将您的主菜单修改为如下所示:

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