Mega Code Archive

 
Categories / C / Structure
 

Using a structure representing a persons name

/* Beginning C, Third Edition  By Ivor Horton  ISBN: 1-59059-253-0  Published: Apr 2004  Publisher: apress */ #include <stdio.h> #include <string.h> #include <ctype.h> #define FIRST_NAME_LEN  31 #define SECOND_NAME_LEN 51 #define NUMBER_LEN      16 #define MAX_NUMBERS     50 #define TRUE             1 #define FALSE            0 /* Structure defining a name */ struct Name {   char firstname[FIRST_NAME_LEN];   char secondname[SECOND_NAME_LEN]; }; /* Structure defining a phone record */ struct PhoneRecord {   struct Name name;   char number[NUMBER_LEN]; }; struct Name read_name();               /* Read a name from the keyboard */                void show(struct PhoneRecord record);  /* Output a phone record         */ int has_name(struct PhoneRecord record, struct Name name); /* Test for a name */ void main() {   char answer = 'n';   struct PhoneRecord records[MAX_NUMBERS];  /* Array of phone records  */   struct Name aName;                        /* Stores a name           */   int count = 0;                            /* Number of phone records */   int found = FALSE;                        /* Records when a name has been found */   int i = 0;                                /* Loop control variable   */     /* Read an arbitrary number of phone records from the keyboard */     do   {     records[count].name = read_name();                 /* Read the name */           printf("Enter the number for this name: ");     scanf(" %[ 0123456789]",records[count++].number);  /* Read the number - including spaces */     printf("Do you want to enter another(y or n)?: ");     scanf(" %c", &answer);   }while(count<=MAX_NUMBERS && tolower(answer) == 'y');   /* Search the array of phone records for a number */   do   {     printf("Enter a name for which you want the number.");     aName =read_name();     for(i = 0 ; i<count ; i++)     {       if(has_name(records[i], aName))                 /* Test for the name */       {         if(!found)                                    /* If this is the first time */         {           found = TRUE;                               /* Reset found flag       */           printf("The numbers for this name are:\n"); /* and output the heading */         }         printf("%s\n", records[i].number);            /* Output the number for the name */       }     }     if(found)                                         /* If the name was found */       found = FALSE;                                  /* Reset the found flag  */     else                                              /* Otherwise output message */       printf("No numbers found for this name.\n");     printf("Do you want to search for another (y or n)? ");     scanf(" %c" , &answer);   }while(tolower(answer) == 'y');   for(i = 0 ; i<count ; i++)     show(records[i]);   printf("\n"); } /* Function to read a name and store it in a Name structure */ struct Name read_name() {   struct Name name;     printf("Enter a first name: ");     scanf(" %s", &name.firstname);     printf("Enter a second name: ");     scanf(" %s", &name.secondname);   return name; } /* Function to output a record */ void show(struct PhoneRecord record) {   printf("\n%s %s   %s", record.name.firstname,record.name.secondname, record.number); } /* Function to test whether the name is the same as in a record */ int has_name(struct PhoneRecord record, struct Name name) {   return (strcmp(name.firstname, record.name.firstname)==0 && strcmp(name.secondname, record.name.secondname)==0); }