Arrays of Structure

When I assign the values to arrays of structure, how can I print them?  Or what wrong with the following my C-progam?

/* Arrays of Stuctures */
#include <stdio.h>

struct card {
      char *face;
      char *suit;
};


main()
{
      int i, j;
      struct card a[13];
      char *face[] = {"Ace", "Deuce", "Three", "Four", "Five",
                              "Six", "Seven", "Eight", "Nine", "Ten",
                              "Jack", "Queen", "King"};
      char *suit[] = {"Hearts", "Diamonds", "Clubs", "Spades"};

      for (i=0; i<=12; i++){
         printf("%6s", a[i].face);
      }
      printf("\n");
      for (j=0; j<=3; j++){
         printf("%8s", a[j].suit);
      }
      printf("\n");
      return 0;
}
mkidoAsked:
Who is Participating?
 
vmehroConnect With a Mentor Commented:
char *face[] = {"Ace", "Deuce", "Three", "Four", "Five",
   "Six", "Seven", "Eight", "Nine", "Ten",
   "Jack", "Queen", "King"};
????
You gotta initialize the member "face" of the structure a[]
like
a[0] = {"Ace", "Hearts"}, etc
0
 
scrapdogCommented:
or you could make face and suit integers in your structure (to be used as indices)

struct card {
int face;
int suit;
}

and print it out the fields like this:

for (i=0; i<=12; i++){
   printf("%6s", face[a[i].face]);

0
 
nietodCommented:
>>You gotta initialize the member "face" of the structure a[]
>>   like
>>   a[0] = {"Ace", "Hearts"}, etc

That will not compile.  The "{ }" syntax may only be used during construction.  The "a[0] ="  is after constuction.

Try

struct card a[13] = {{"Ace","Hearts"},
   {"Duece","Hearts"},
   {"Thre","Hearts"},
   {"Four","Hearts"},
   {"Five","Hearts"},
   {"Six","Hearts"},
   {"Seven","Hearts"},
   {"Eight","Hearts"},
   {"Nine","Hearts"},
   {"Ten","Hearts"},
   {"Jack","Hearts"},
   {"Queen","Hearts"},
   {"King","Hearts"}};
0
 
mkidoAuthor Commented:
If I want to avoid the following long initialization, how do you do?  Thanks.
struct card a[52] = {{"Ace","Hearts"},
         {"Duece","Hearts"},
         {"Thre","Hearts"},
         {"Four","Hearts"},
         {"Five","Hearts"},
         {"Six","Hearts"},
         {"Seven","Hearts"},
         {"Eight","Hearts"},
         {"Nine","Hearts"},
         {"Ten","Hearts"},
         {"Jack","Hearts"},
         {"Queen","Hearts"},
         {"King","Hearts"}},
         {"Ace","Diamonds"},
         {"Duece","Diamonds"},
         {"Thre","Diamonds"},
         {"Four","Diamonds"},
         {"Five","Diamonds"},
         {"Six","Diamonds"},
         {"Seven","Diamonds"},
         {"Eight","Diamonds"},
         {"Nine","Diamonds"},
         {"Ten","Diamonds"},
         {"Jack","Diamonds"},
         {"Queen","Diamonds"},
         {"King","Diamonds"},
         {"Ace","Clubs"},
         {"Duece","Clubs"},
         {"Thre","Clubs"},
         {"Four","Clubs"},
         {"Five","Clubs"},
         {"Six","Clubs"},
         {"Seven","Clubs"},
         {"Eight","Clubs"},
         {"Nine","Clubs"},
         {"Ten","Clubs"},
         {"Jack","Clubs"},
         {"Queen","Clubs"},
         {"King","Clubs"}},
         {"Ace","Spades"},
         {"Duece","Spades"},
         {"Thre","Spades"},
         {"Four","Spades"},
         {"Five","Spades"},
         {"Six","Spades"},
         {"Seven","Spades"},
         {"Eight","Spades"},
         {"Nine","Spades"},
         {"Ten","Spades"},
         {"Jack","Spades"},
         {"Queen","Spades"},
         {"King","Spades"}};


0
 
nietodCommented:
You could use a loop to initialize the card array from an array of suites and array of face names, like

char *Suits[4] = {"Clubs","Hearts","Spafes",Diamonds"};
char *Faces[13]  = {"Ace","Deuce","Two",Three","Four","Five","Six",
    "Seven","Eight","Nine","Ten","Jack","Queen","King"};
card a[52];

int SuitNum = 0;
int FaceNum = 0;
for (int i = 0; i < 52; ++i)
{
   a[i].suit = Suites[SuiteNum];
   a[i].face = Faces[FaceNum];
   ++FaceNum;
   if (FaceNum >= 13)
   {
     ++SuiteNum;
     FaceNum = 0;
   }
}


Note that if you use this approach, the string values in the card array point to string that are used multiple times.  These string should not be changed.  (Although the pointers can be).  To make this safe, I would declare the card structure as having "const char *" pointers not just "char *" pointers.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.