2 votes

C++ tirer une carte du jeu

J'essaie de créer un programme qui tire une carte d'un jeu de 52 cartes à jouer ordinaires.

  • Costumes : Coeur, Pique, Carreau, Trèfle.

  • Rang : A,2,3,4,5,6,7,8,9,10,J,Q,K.

Ceci devrait être la sortie :

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

Mon résultat est :

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

Voici mon code :

#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;
}

Je n'arrive pas à comprendre pourquoi les cartes tirées (DK) sont dans cette position et pourquoi je reçois aussi le 00. Qu'est-ce que je fais de mal ? Merci

2voto

Vos appels à rankCard() et suitCard() renvoient toujours 0.

Ce 0 est ce qui est transmis à cout dans votre fonction principale.

Le "DK" bizarre est causé par les appels à cout à l'intérieur de rankCard et suitCard .

Vous pourriez modifier vos fonctions pour éviter la confusion :

#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 "";
}

1voto

anastaciu Points 20051

Cette ligne :

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

Ces fonctions impriment la carte, et renvoient 0, donc si vous les appelez en cout ils vont faire leur travail qui est d'imprimer la carte et ensuite d'imprimer la valeur de retour qui est 0.

Ce que vous pouvez faire, c'est les appeler en dehors de l'espace de travail. cout fais-le :

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

Personnellement, je remanierais les fonctions pour qu'elles renvoient le caractère de la carte respective :

Echantillon en direct

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
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X