C++中的随机数

vir*_*raj 0 c++ random numbers class blackjack

我正在创建一个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;
}
Run Code Online (Sandbox Code Playgroud)

And*_*rei 11

种子数生成器ONCE.如果在循环中运行函数,它们的执行速度将超过时间分辨率区间(因此所有种子都是相同的,因此数字也是如此).

在开发应用程序并对其进行调试时,如果您使用相同的已知值为种子生成种子,它将会有所帮助.这意味着连续的调试会话将使用来自生成器的相同值.不要忘记在发布版本中切换回基于time()的种子(或者使用预处理器来检测它是否是Debug或Release版本并为您完成).