0

我有一个问题srand()。它仅在我使用数字作为参数时才有效,例如srand(1234),但是当我尝试将它与 'n' 或 time 一起使用时(如下所示),它会randint()一直返回相同的值。

#include <iostream>
#include <experimental/random>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
    srand(time(nullptr));
    for (int i = 0; i < 4; ++i) {
        int random = experimental::randint(0, 9);
        cout << random;
    }
}

谢谢你的时间。

4

1 回答 1

1

C 函数srand旨在与 C 函数结合使用rand。这些是与 C++std::experimental标头中的函数不同的函数。后者的randint函数旨在与reseed来自同一标头的函数一起使用:

#include <experimental/random>
#include <iostream>

int main() {
    std::experimental::reseed();

    for (int i = 4; i--; ) {
        int random = std::experimental::randint(0, 9);
        std::cout << random << '\n';
    }
}

但是,这里没有必要使用实验性功能。从 C++11 开始,有std::uniform_int_distribution

#include <iostream>
#include <random>
 
int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> distrib(0, 9); // Default type is 'int'
 
    for (int i = 4; i--; ) {
        int random = distrib(gen);
        std::cout  << random << '\n';
    }
}

这种方法比 C 标准库中的方法更灵活,通常应该在 C++ 中首选。

于 2021-09-05T20:31:15.623 回答