C ++ вытащить карту из колоды - PullRequest
2 голосов
/ 27 февраля 2020

Я пытаюсь создать программу, которая вытянет карту из колоды из 52 обычных игральных карт.

  • Подходит: Heart, Spad, Diamond, Club.

  • Ранг: A, 2,3,4,5,6,7,8,9,10, J, Q, K.

This должен быть вывод:

Let's pull a card!
This time we got AH
Wanna pull a card again?
y
This time we got 3J
Wanna pull a card again?
n

Мой вывод:

Let's pull a card!
DKThis time we got 00
Wanna pull a card again?
n

Это мой код:

#include <iostream>
#include <ctime>
using namespace std;

// Function Declaration
int rankCard(), suitCard();

int main()
{
    srand(time(0));

    char answer;

    cout << "Let's pull a card!" << endl;

    do {
        cout << "This time we got " << rankCard() << suitCard() << endl;
        cout << "Wanna pull a card again?" << endl;
        cin >> answer;
    } while ((answer == 'y') || (answer == 'Y'));

    return 0;
}

int rankCard() {
    int rank = (rand() % 13) + 1;
    switch (rank) {
    case 1: cout << "A";
        break;
    case 10: cout << "T";
        break;
    case 11: cout << "J";
        break;
    case 12: cout << "Q";
        break;
    case 13: cout << "K";
        break;
    default: cout << rank;
        break;
    }

    return 0;
}

int suitCard() {
    int suit = (rand() % 4) + 1;
    switch (suit) {
    case 1: cout << "H";
        break;
    case 2: cout << "D";
        break;
    case 3: cout << "C";
        break;
    case 4: cout << "S";
        break;
    }
    return 0;
}

Я не могу понять, почему карты натянутые (DK) находятся в таком положении и почему я тоже получаю 00. Что я делаю не так? Спасибо

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Ваши вызовы rankCard() и suitCard() всегда возвращают 0.

Это 0 значение - это то, что передано cout в вашей основной функции.

Странный 'DK 'вызвано вызовами cout внутри rankCard и suitCard.

Вы можете изменить свои функции, чтобы избежать путаницы:

#include <string>

std::string rankCard() {
    int rank = (rand() % 13) + 1;
    switch (rank) {
       case 1: return "A";
       case 10: return "T";
       case 11: return "J";
       case 12: return "Q";
       case 13: return "K";
       default: return std::to_string( rank );
    }
    return "";
}
std::string suitCard() {
    int suit = (rand() % 4) + 1;
    switch (suit) {
        case 1: return "H";
        case 2: return "D";
        case 3: return "C";
        case 4: return "S";
    }
    return "";
}
1 голос
/ 27 февраля 2020

Эта строка:

cout << "This time we got " << rankCard() << suitCard() << endl;

Таким образом, эти функции печатают карточку, а затем возвращают 0, поэтому, если вы вызовете их в cout, они сделают свое дело, напечатав карточку, а затем выведите возвращаемое значение, равное 0.

Что вы можете сделать, это вызвать их за пределами cout, просто сделайте:

//...
cout << "This time we got ";
rankCard();
suitCard(); 
cout << endl;
cout << "Wanna pull a card again?" << endl;
//...

Лично я бы реорганизовал функции для возврата соответствующих символ карты:

Живой образец

const char rankCard() {
    int rank = (rand() % 13) + 1;
    switch (rank) {
    case 1: return 'A';
    case 10: return 'T';
    case 11: return 'J';
    case 12: return 'Q';
    case 13: return 'K';
    default: return rank + 48; // convert to decimal digit
    }   
}

const char suitCard() {
    int suit = (rand() % 4) + 1;
    switch (suit) {
    case 1: return 'H';
    case 2: return 'D';
    case 3: return 'C';
    case 4: return 'S';
    default: return 0;  //ASCII code for null character
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...