> Online tutorial


/*********************************************************/
/*                                                       */
/* Structures Demo                                       */
/*                                                       */
/*********************************************************/

   /* Simple program to initialize some structures */
   /* and to print them out again. Does no error   */
   /* checking, so be wary of string sizes etc..   */

#include <stdio.h>

#define NAMESIZE    30
#define ADDRSIZE    80
#define NOOFPERSONS 20
#define NEWLINE()   putchar('\n');

/*********************************************************/

typedef struct
  {
  char *Name;
  char *Address;
  int YearOfBirth;
  int MonthOfBirth;
  int DayOfBirth;
  }
PersonDat;

/*********************************************************/

main ()                          /* Make some records */

{ PersonDat record[NOOFPERSONS];
  PersonDat PersonalDetails();
  int person;

printf ("Birth Records For Employees");
printf ("\n---------------------------");
printf ("\n\n");

printf ("Enter data\n");

for (person = 0; person < NOOFPERSONS; person++)
   {
   record[person] = PersonalDetails();
   NEWLINE();
   }

DisplayRecords (record);
}

/*********************************************************/

PersonDat PersonalDetails()     /* No error checking! */

{ PersonDat dat;
  char strbuff[ADDRSIZE], *malloc();

printf ("Name :");
dat.Name = malloc(NAMESIZE);
strcpy (dat.Name,gets(strbuff));

printf ("Address :");
dat.Address = malloc(ADDRSIZE);
strcpy (dat.Address,gets(strbuff));

printf ("Year of birth:");
dat.YearOfBirth = getint (1900,1987);

printf ("Month of birth:");
dat.MonthOfBirth = getint (1,12);

printf ("Day of birth:");
dat.DayOfBirth = getint(1,31);

return (dat);
}

/**********************************************************/

DisplayRecords (rec)

PersonDat rec[NOOFPERSONS];

{ int pers;

for (pers = 0; pers < NOOFPERSONS; pers++)
   {
   printf ("Name : %s\n", rec[pers].Name);
   printf ("Address : %s\n", rec[pers].Address);
   printf("Date of Birth: %1d/%1d/%1d\n",rec[pers].DayOfBirth,
              rec[pers].MonthOfBirth,rec[pers].YearOfBirth);
   NEWLINE();
   }
}

/**********************************************************/
/* Toolkit                                                */
/**********************************************************/

getint (a,b)             /* return int between a and b */

int a,b;

{ int  p, i = a - 1;

for (p=0; ((a > i) || (i > b)); p++)
   {
   printf ("? : ");
   scanf ("%d",&i);
   if (p > 2)
      {
      skipgarb();
      p = 0;
      }
   }
skipgarb();
return (i);
}

/**********************************************************/

skipgarb()       /* Skip input garbage corrupting scanf */

{
while (getchar() != '\n')
   {
   }
}


/******************************************************/
/*                                                    */
/* String storage allocation                          */
/*                                                    */
/******************************************************/

#include <stdio.h>

/* #include another file for malloc() and   */
/* strlen() ???. Check the compiler manual! */

#define NOOFSTR   10
#define BUFSIZE   255
#define CODE      0

/******************************************************/
/* Level 0                                            */
/******************************************************/


main ()

{ char *array[NOOFSTR], *malloc();
  char buffer[BUFSIZE];
  int i;

for (i = 0; i < NOOFSTR; i++)
   {
   printf ("Enter string %d :",i);
   scanf  ("%255s",buffer);

   array[i] = malloc(strlen(buffer)+1);

   if (array[i] == NULL)
      {
      printf ("Can't allocate memory\n");
      QuitSafely (array);
      }

   strcpy (array[i],buffer);
   }

for (i = 0; i < NOOFSTR; i++)
   {
   printf ("%s\n",array[i]);
   }

QuitSafely(array);
}

/******************************************************/
/* Snakes & Ladders!                                  */
/******************************************************/

QuitSafely (array)       /* Quit & de-alloc memory */

char *array[NOOFSTR];

{ int i, len;

for (i = 0; i < NOOFSTR; i++)
   {
   len = strlen(array[i]) + 1;
   if (free (array[i]) != 0)
      {
      printf ("Debug: free failed\n");
      }
   }

exit (CODE);
}



/*********************************************************/
/*                                                       */
/* MENU : program which prints out a menu                */
/*                                                       */
/*********************************************************/

main ()

{ int str_number;

for (str_number = 0; str_number < 13; str_number++)
   {
   printf ("%s",menutext(str_number));
   }
}

/*********************************************************/

char *menutext(n)           /* return n-th string ptr */

int n;

{
  static char *t[] =
   {
   "  -------------------------------------- \n",
   " |            ++ MENU ++                |\n",
   " |           ~~~~~~~~~~~~               |\n",
   " |     (1) Edit Defaults                |\n",
   " |     (2) Print Charge Sheet           |\n",
   " |     (3) Print Log Sheet              |\n",
   " |     (4) Bill Calculator              |\n",
   " |     (q) Quit                         |\n",
   " |                                      |\n",
   " |                                      |\n",
   " |     Please Enter Choice              |\n",
   " |                                      |\n",
   "  -------------------------------------- \n"
   };
return (t[n]);
}