Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 洗牌的简单方法_C++_Arrays_Random - Fatal编程技术网

C++ 洗牌的简单方法

C++ 洗牌的简单方法,c++,arrays,random,C++,Arrays,Random,我正在寻找一种简单的方法来洗牌。我已经完成了牌组,创建洗牌52张牌的函数的简单方法是什么?我不是在寻找复杂的洗牌方式,我更喜欢能轻松阅读的代码。我试着把rand()放在cout部分,但它只是把西装和脸都随机化了,我得到了错误的卡片 struct Card { int value; char suit; }; Card cards[52]; //global variables int main() { int play;

我正在寻找一种简单的方法来洗牌。我已经完成了牌组,创建洗牌52张牌的函数的简单方法是什么?我不是在寻找复杂的洗牌方式,我更喜欢能轻松阅读的代码。我试着把rand()放在
cout
部分,但它只是把西装和脸都随机化了,我得到了错误的卡片

struct Card 
    {
        int value;
        char suit;
    };
Card cards[52];   //global variables

int main()
{
    int play;

    shuffleDeck();
    cout << endl<<endl;
    cout << "---------------------------" << endl;
    cout << "|Welcome to The Game Of 31| " << endl;
    cout << "---------------------------" << endl;
    cout << "Would you like to play? (1 for 'YES', 0 for 'NO'): ";
    cin >> play;
    if (play == 1) { shuffleDeck(); }
    else { cout << "See yaa!"; exit(0); }



}


void shuffleDeck() {
    for (int i = 0; i < 52; i++)
    {
        cards[i].value = i % 13; // 13 values
        if (cards[i].value == 0) {
            cards[i].value = 1;
        }
        else if (cards[i].value == 1) {
            cards[i].value = 2;
        }
        else if (cards[i].value == 2) {
            cards[i].value = 3;
        }
        else if (cards[i].value == 3) {
            cards[i].value = 4;
        }
        else if (cards[i].value == 4) {
            cards[i].value = 5;
        }
        else if (cards[i].value == 5) {
            cards[i].value = 6;
        }
        else if (cards[i].value == 6) {
            cards[i].value = 7;
        }
        else if (cards[i].value == 7) {
            cards[i].value = 8;
        }
        else if (cards[i].value == 8) {
            cards[i].value = 9;
        }
        else if (cards[i].value == 9) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 10) {
            cards[i].value = 10;

        }
        else if (cards[i].value == 11) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 12) {
            cards[i].value = 10;
        }


        cards[i].suit = i / 13;// 4 suits
        if (cards[i].suit == 0) {
            cards[i].suit = 'D';
        }
        else if (cards[i].suit == 1) {
            cards[i].suit = 'H';
        }
        else if (cards[i].suit == 2) {
            cards[i].suit = 'C';
        }
        else if (cards[i].suit == 3) {
            cards[i].suit = 'S';
        }
    }

    for (int count = 0; count < 52; count++) {
        int count2 = 0;
        cout << " | " << cards[count].value;
        cout << cards[count].suit << " | ";

        if (count == 13) { cout << endl; }
        else if (count == 26) { cout << endl; }
        else if (count == 39) { cout << endl; }
        else if (count == 52) { cout << endl; }
    }
}
结构卡 { int值; 炭服; }; 信用卡[52]//全局变量 int main() { 智力游戏; shuffleDeck(); 你可以把这些卡片做成这样:

std::random_device rd;
std::mt19937 g(rd());

std::shuffle(cards, cards + 52, g);

不要太担心第一条2条线。你可以把它看作是保证卡片被洗牌的一种方法。< /P>使用它。??这是一种洗牌一组数据的函数。它随机地把容器中的项目洗牌。除非你是一个学术性的任务,禁止你使用C++标准库。>卡片[i].value=std::min(10,(i%13)+1);卡片[i].suit=“DHCS”[i/13];替换长时间的初始化。用于此操作的库是什么?我在答案中添加了链接。它位于
中。请查看该链接中的示例代码。它直接来自
c++
标准库。它应该对支持2011标准或更高标准的编译器有效。
std::random_device rd;
std::mt19937 g(rd());

std::shuffle(cards, cards + 52, g);