Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 225
  • Last Modified:

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;
}
0
mkido
Asked:
mkido
1 Solution
 
vmehroCommented:
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

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now