home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / qc_prog / chap11 / card3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-04-06  |  2.3 KB  |  88 lines

  1. /* card3.c --  demonstrates pointers to structures     */
  2.  
  3. #include <stdio.h>      /* for NULL  and stdin */
  4. #include <string.h>     /* for strdup()        */
  5.  
  6. #define MAXN 79
  7.  
  8. struct cardstruct {                 /* global pattern */
  9.     char *first, *last, *middle;
  10.     long street_num;
  11.     char *street, *city, *state;
  12.     long zip;
  13.     int  area_code;
  14.     long phone;
  15. };
  16.  
  17. main()
  18. {
  19.     int  i;
  20.     char *Str_Input();
  21.     long Lint_Input();
  22.     struct cardstruct card1, card2;
  23.  
  24.     for (i = 0; i < 2; i++) /* do twice */
  25.         {
  26.         printf("\nCard %d:\n\n", i + 1);
  27.  
  28.         card1.first         = Str_Input("First Name");
  29.         card1.last          = Str_Input("Last Name");
  30.         card1.middle        = Str_Input("Middle Name");
  31.         card1.street_num    = Lint_Input("Street Number");
  32.         card1.street        = Str_Input("Street Name");
  33.         card1.city          = Str_Input("City");
  34.         card1.state         = Str_Input("State");
  35.         card1.zip           = Lint_Input("Zip Code");
  36.         card1.area_code     = (int)Lint_Input("Area Code");
  37.         card1.phone         = Lint_Input("Phone Number");
  38.  
  39.         if (i == 0)
  40.             card2 = card1;
  41.         }
  42.     Showcard(&card2);     /* pass addresses of structures */
  43.     Showcard(&card1);
  44.  
  45.     return (0);
  46. }
  47.  
  48. Showcard(cardptr)
  49. struct cardstruct *cardptr; /* pointer receives an address */
  50.     {
  51.     printf("\n\n");
  52.  
  53.     printf("%s %s %s\n", cardptr->first, cardptr->middle, 
  54.             cardptr->last);
  55.     printf("%ld %s, %s, %s %ld\n", cardptr->street_num, 
  56.             cardptr->street, cardptr->city, cardptr->state,
  57.             cardptr->zip);
  58.     printf("(%d) %ld\n", cardptr->area_code, cardptr->phone);
  59.     }
  60.  
  61. char *Str_Input(char *prompt)
  62.     {
  63.     char buf[MAXN + 1], *ptr;
  64.  
  65.     printf("%s: ", prompt);
  66.     if (fgets(buf, MAXN, stdin) == NULL)
  67.         exit(0);
  68.     buf[strlen(buf) - 1] = '\0'; /* strip '\n' */
  69.     if (strlen(buf) == 0)
  70.         exit(0);
  71.     if ((ptr = strdup(buf)) == NULL)
  72.         exit(0);
  73.     return (ptr);
  74. }
  75.  
  76. long Lint_Input(char *prompt)
  77. {
  78.     char buf[MAXN + 1];
  79.     long num;
  80.  
  81.     printf("%s: ", prompt);
  82.     if (fgets(buf, MAXN, stdin) == NULL)
  83.         exit(0);
  84.     if (sscanf(buf, "%ld", &num) != 1)
  85.         exit(0);
  86.     return (num);
  87. }
  88.