如何使用C++中输出的rand函数



我正在尝试创建一个老虎机,在那里我必须从2-7中生成3个随机数,然后使用该输出来给出不同的结果。例如,如果输出是777,那么你的赌注乘以10,如果是222,那么它乘以5。我似乎无法将rand函数的输出转换为一个变量来使用它,而且它的计算不正确。

代码:

这不是完整的代码

if (bet <= 2000)
{
std::cout << endl;
int game_num = 0;
srand (0);
for (int i = 0; i < 3; i++)
std::cout << (rand() % 1) + 2;
std::cout << endl;
if (game_num == 777)
{
bet = bet * 10;
std::cout << "You Won: " << bet << endl;
return 0;
}
else if (game_num == 222 || 333 || 444 || 555 || 666)
{
bet = bet * 5;
std::cout << "You Won: " << bet << endl;
return 0;
}

问题是在这种情况下,您没有正确地为随机数生成器播种。

每次程序运行时,这将始终返回相同的随机数序列。

srand(0)

您希望在每次运行程序时为随机数生成器设定一个新值。

在运行时使用时间戳将启用该行为。

srand(time(0))
Dan的答案是正确的,你每次都使用相同的种子,所以每个数字序列都是相同的。您需要使用一个随机值进行种子设定。就随机性而言,时间作为随机性的来源并不好,但除非你在同一秒内运行两次,否则它是有效的(因为time()只计算秒,而秒……对于现代计算机来说很长,不像1970年代的计算机,当时发明了这种播种方式(。

因此,老实说,根本不要使用srandrand。它们一开始就非常糟糕的随机数生成器,并且它们依赖于"随机数生成器";隐藏的";国家让他们成为一场噩梦。仅仅忽略它们的存在!

C++自带随机功能:

您需要均匀整数分布,因此请使用uniform_int_distribution。使用实际随机性生成事件中的实际随机值进行种子。

#include <random>
// … 
// Somewhen before you need the random numbers, not every time:
// Will be used to obtain a seed for the random number engine
std::random_device real_random;  
// Set up the generator for random bits, seed it from the actual random 
std::mt19937 gen(real_random());
// Use that to generate random numbers in [2,7]
std::uniform_int_distribution<> distrib(2, 7);
// Where you need the randomness:
for (int i = 0; i < 3; i++)
std::cout << distrib(gen) << "n";

最新更新