首页 文章

rand()随机数生成C [重复]

提问于
浏览 892
-4

这个问题在这里已有答案:

我试图使用 rand() 函数生成伪随机整数 . 它的工作原理,但我的问题是它始终与int的名称相同"selecting" . (在这种情况下,它是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 回答

  • 4

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

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

    您没有看到随机数生成器,因此每次运行应用程序时它都会为您提供完全相同的“随机”数字集(这对调试很有用) . 要修复它,修改您的主要看起来像这样:

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

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

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

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

相关问题