L-23 MCS 275 Fri 2 Mar 2001
Below is the listing of the program we discussed in class:
/* L-23 MCS 275 Fri 2 Mar 2001 managing items in store */
#include <stdio.h>
#include <stlib.h>
#define max 80 /* maximal number of characters in string */
struct item
{
int label;
char *name;
float price;
};
struct item *create_inventory ( int n );
/* returns an inventory of n items, read from standard input */
struct item *ptr_create_inventory ( int n );
/* pointer version of creation of inventory */
void display_inventory ( int n, struct item invent[] );
/* displays the inventory of n items */
void ptr_display_inventory ( int n, struct item invent[] );
/* pointer version of display_inventory */
int main()
{
struct item *invent;
int n;
printf("Give the number of items : ");
scanf("%d",&n);
invent = ptr_create_inventory(n);
printf("displaying with the array version...\n");
display_inventory(n,invent);
printf("displaying with the pointer version...\n");
ptr_display_inventory(n,invent);
return 0;
}
struct item *create_inventory ( int n )
{
int i;
struct item *invent = malloc(n*sizeof(struct item));
for (i = 0; i < n; i++)
{
printf("Reading data for item %d :\n", i+1);
printf(" Give label : "); scanf("%d", &invent[i].label);
invent[i].name = calloc(max,sizeof(char));
printf(" Give name : "); scanf("%s", invent[i].name);
printf(" Give price : "); scanf("%f", &invent[i].price);
}
return invent;
}
struct item *ptr_create_inventory ( int n )
{
struct item *invent = malloc(n*sizeof(struct item));
struct item *p;
int i = 1;
for (p = invent; p < invent+n; p++)
{
printf("Reading data for item %d :\n", i++);
printf(" Give label : "); scanf("%d", &p->label);
p->name = calloc(max,sizeof(char));
printf(" Give name : "); scanf("%s", p->name);
printf(" Give price : "); scanf("%f", &p->price);
}
return invent;
}
void display_inventory ( int n, struct item invent[] )
{
int i;
printf("The inventory of %d items :\n", n);
for (i = 0; i < n; i++)
printf(" %d %10s %7.2f\n",
invent[i].label, invent[i].name, invent[i].price);
}
void ptr_display_inventory ( int n, struct item *invent )
{
struct item *p;
printf("The inventory of %d items :\n", n);
for (p = invent; p < invent+n; p++)
printf(" %d %10s %7.2f\n", p->label, p->name, p->price);
}