C++中的随机数
Random Numbers in C++
我正在创建一个BlackJack程序。我希望这些牌是随机发的。如果我使用rand()函数并将srand()初始化为time(NULL),那么所有的卡都是一样的。知道可能是什么问题吗?
//Cards.h
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
class Cards
{
private:
int val_seed,suit_seed;
public:
int val[10];
string card[10];
int dealcard(int x)
{
srand();
val_seed=rand()%13 + 2;
suit_seed=rand()%4 + 1;
if(val_seed>=1 && val_seed<=10)
{
if(val_seed==10)
{
card[x]="10";
}
else
{
card[x]=val_seed+48;
}
}
else if(val_seed>10)
{
switch(val_seed)
{
case 11: card[x]="J"; val_seed=10; break;
case 12: card[x]="Q"; val_seed=10; break;
case 13: card[x]="K"; val_seed=10; break;
case 14: card[x]="A"; val_seed=11; break;
}
}
switch(suit_seed)
{
case 1: card[x]+='3'; break;
case 2: card[x]+='4'; break;
case 3: card[x]+='5'; break;
case 4: card[x]+='6'; break;
}
val[x]=val_seed;
}
};
//main.cpp
#include <cstdlib>
#include <iostream>
#include "Cards.h"
using namespace std;
int main(int argc, char *argv[])
{
Cards k;
for(int a=1; a<=9; a++)
{
k.dealcard(a);
}
for(int e=1; e<=9; e++)
{
cout<<k.card[e]<<"("<<k.val[e]<<")"<<" ";
}
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
为数字生成器设定一次种子。如果在循环中运行函数,它们的执行速度将快于时间分辨率间隔(因此所有种子都是相同的,因此数字也是相同的)。
在开发和调试应用程序时,如果您为生成器植入相同的已知值,这将有所帮助。这意味着连续的调试会话将使用来自生成器的相同值。不要忘记在发布版本中切换回基于时间()的种子(或者使用预处理器来检测它是调试版本还是发布版本并为您执行)。
请参阅http://www.cplusplus.com/reference/clibrary/cstdlib/srand/
srand最好用一个唯一的值来初始化,例如时间,因为计算机不会生成随机数,但实际上是根据predone列表来工作的,这会使起点不太确定。
您不希望每次使用rand
都调用srand
,只需在程序开始时调用一次即可。
以时间为参数调用它也可以确保每次运行程序时都会得到不同的随机序列。
尽管使用srand()
存在问题,但您的卡生成算法是错误的。即使在一行中生成两张相同卡片的可能性也意味着它是错误的。
你应该拿一副牌(52张或其倍数),用随机生成的种子洗牌,然后从洗牌的牌组发牌。
您正在为srand()
播种null;用当前时钟时间播种,然后重试应该可以解决您的问题。
time_t now;
time(&now);
srand((unsigned int)now);
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- if数组上的随机数
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 半随机数生成C++
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 具有随机数的二维数组不会更改
- 随机数未达到限制
- 我想生成许多矩阵并用随机数填充它
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 制作具有平均值的随机数生成器
- 为什么 rand 不在我的代码中生成随机数?
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 从给定种子生成相同的随机数序列C++
- 随机数生成函数说明
- C++ 尝试生成随机数时弹出警告帮助?
- 尝试在 c++ 中创建随机数生成器并收到错误
- 从给定的随机数组值生成随机数 Arduino程序C++
- 如何在个人计算机和群集 (c++) 上生成相同的随机数