您正在生成一个随机数,然后将其打印五次。代码rand() % seed + 1 是生成值的原因。您将那个值保存在randNum 中并打印五次。您可以改为多次运行代码rand() % seed + 1 以获得多个值。
在这种情况下,您没有正确使用“种子”一词。在伪随机数生成器的上下文中,种子是生成器的初始状态。通过将种子值传递给srand()('s' 代表种子)来为rand() 使用的 pRNG 播种。
无论如何,你不应该使用rand()。而是使用 C++ <random> 库。使用这个库,您可以非常轻松地在用户定义的范围内创建值。
使用<random> 生成随机值的基本方法使用两个组件:“随机性”的来源,pRNG,我将其称为引擎,以及从引擎获取随机性并使用它来生成的对象在特定范围内随机取值。
#include <iostream>
#include <random>
int main() {
int min, max;
std::cout << "enter number 1.\n";
std::cin >> min;
std::cout << "enter number 2 (greater than number 1).\n";
std::cin >> max;
std::uniform_int_distribution<> make_number_in_range(min, max);
std::mt19937 engine;
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
}
输入数字 1。1
输入数字 2(大于数字 1)。 6
5 2 5 6 2
在此代码中,值由代码make_number_in_range(engine) 生成。请注意,此代码多次运行以产生多个值。
还请注意,您不必通过一些算术运算来操纵rand() 的结果,您只需告诉make_number_in_range 您想要的范围。您的原始代码执行了错误的算术运算,但此代码不必担心。
您的原始程序和我上面展示的程序都不会在每次使用特定输入运行时产生不同的输出。这是因为随机数生成器总是以相同的初始状态开始。 (但是,不同的实现可能会显示不同的结果,因此当您尝试我使用的范围时,您可能不会看到我上面显示的相同数字。)
为了在每次运行程序时获得不同的结果,您需要每次对 pRNG 进行不同的播种。为此,您可以像这样更新程序:
#include <iostream>
#include <random>
int main() {
int min, max;
std::cout << "enter number 1.\n";
std::cin >> min;
std::cout << "enter number 2 (greater than number 1).\n";
std::cin >> max;
std::uniform_int_distribution<> make_number_in_range(min, max);
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::mt19937 engine(seed);
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
std::cout << make_number_in_range(engine) << ' ';
}