/*

 * cards_1.c

 * This program picks up five cards and prints them.

 */

 

#include <stdio.h>

#include <stdlib.h>

 

/* The value of a card: A, 2-10, J, Q and K: */

enum Value

{

  ACE = 1,

  TWO,

  THREE,

  FOUR,

  FIVE,

  SIX,

  SEVEN,

  EIGHT,

  NINE,

  TEN,

  JACK,

  QUEEN,

  KING

};

 

/* The possible suits. */

enum Suit

{

  HEARTS,

  SPADES,

  DIAMONDS,

  CLUBS,

 

  N_SUITS

};

 

#define N_CARDS 5

 

int main ()

{

  enum Value vals[N_CARDS];

  enum Suit  suits[N_CARDS];

  const char *suit_names[N_SUITS] = {"hearts", "spades", "diamonds", "clubs"};

  int        is_unique;

  int        i, j;

 

  for (i = 0; i < N_CARDS; i++)

  {

    /* Pick up the current card. */

    do

    {

      vals[i] = (enum Value)(1 + rand() % 13);

      suits[i] = (enum Suit)(rand() % N_SUITS);

     

      /* Make sure the card is unique. */

      is_unique = 1;

      for (j = 0; j < i; j++)

      {

        if (vals[i] == vals[j] && suits[i] == suits[j])

        {

          /* We already have this card: */

          is_unique = 0;

          break;

        }

      }

    } while (! is_unique);

 

    /* Print the card. */

    switch (vals[i])

    {

    case ACE:

      printf ("A of %s", suit_names[suits[i]]);

      break;

 

    case JACK:

      printf ("J of %s", suit_names[suits[i]]);

      break;

 

    case QUEEN:

      printf ("Q of %s", suit_names[suits[i]]);

      break;

 

    case KING:

      printf ("K of %s", suit_names[suits[i]]);

      break;

 

    default:

      printf ("%d of %s", vals[i], suit_names[suits[i]]);

    }

    printf ("\n");

  }

 

  return (0);

}