structs error

musicmancanora4's Avatar
Go4Expert Member
I get an error saying parse error before category Type on line 258 not sure why
currentItem = CategoryType->headItem;
im trying to set the headItem to the start of the linked list there is my structs
I posted another thread with the full code but nobody has responded

Code:
int loadData(GJCType* menu, char* menuFile, char* submenuFile)
{
   /*pointer for malloc*/
   CategoryType *newCat, *currentCat, *prevCat ;
   ItemType     *newItem, *currentItem, *prevItem;
   
   

   /*declaration of variables*/
   int CountNoLines = 0;
   char temp[LINE_LENGTH];
   char tempf2[LINE_LENGTH];
   
   /* variables for tokenizer for menu file*/
   char *catID;
   char *catType;
   char *catName;
   char *catDescription;
   char *line;
   
   int count;
   
   /* variables for sub menu*/
   char *itemIDPtr;
   char *itemNamePtr;
   char *itemDescriptionPtr;
   char *dollarPtr;
   char *centsPtr;
   
   float dollarInt;
   float centInt;
   
   /* declare file pointers to files*/
   FILE *f1;
   FILE *f2;
   
   
   /* opening the menu and submenu for reading*/
   f1 = fopen(menuFile, "r");
   f2 = fopen(submenuFile, "r");
   
   /* check to see if the filuse exists*/
   if(f1 ==NULL || f2 == NULL)
   {
      /* check whether both files have existed or typed in correctly*/
      if(f1 == NULL && f2 == NULL)
      {
      
         printf("Both files do not exist %s %s\n",menuFile,submenuFile);
      }
      /* check for each file existance*/
      else if (f1 == NULL)
      {
         printf("%s does not exist\n\n",menuFile);
      }
      /* check for each file existance*/
      else if(f2 == NULL)
      {
         printf("%s does not exist\n\n", submenuFile);
	 
      } 
      printf("EXITING PROGRAM ERROR!\n\n");
      return ERRORCODE; /* cannot proceed*/
   }
   
   /* counts how many fields there are in the file*/
   
   while(fgets(temp, LINE_LENGTH +2, f1)!=NULL)
   {
           
	   
           currentCat = menu->headCategory;
   
	   newCat = malloc(sizeof(CategoryType));
	   
	   
           if(prevCat == NULL)
	   {
	       menu->headCategory = newCat;
	       
	   
	   }
	  /* else
	   {
	       prevCat->nextCategory = newCat;
	      
	  */
   
           /* stores the catID but also checks if there
	   is a duplicate*/
	    
           catID = strtok(temp, "|");
	   
	   /* checking whether it tokenizez*/
	/*   if(catID == NULL)
	   {
	      printf("CatID missing\n");
	   }*/
	   strcpy(newCat->categoryID, catID);
	   
	   
	   /*checks for a duplication of the id field*/
	   if(!checkDuplicationID(menu, catID))
	   {
	      return ERRORCODE;
	   }
           /* gets the second field and tokenizez it*/
	   catType = strtok(NULL, "|");
	   newCat->drinkType = catType[0];
	   
	    /* checking whether it tokenizez*/
	   if(catType == NULL)
	   {
	      printf("CatType missing\n");
	   }
	   
	   
	   catName = strtok(NULL, "|");
	   strcpy(newCat->categoryName, catName);
	    /* checking whether it tokenizez*/
	    
	   if(catName == NULL)
	   {
	      printf("CatName missing\n");
	   }
	   
	   
	   catDescription = strtok(NULL, "\n");
	   strcpy(newCat->categoryDescription, catDescription);
	    /* checking whether it tokenizez*/
	   if(catDescription == NULL)
	   {
	      printf("CatDescription missing\n");
	   }
	   
	   /* checks the string length of the field*/
	   if((strlen(catID) >ID_LEN) ||
	      (strlen(catType) >MAX_NAME_LEN)  ||
	      (strlen(catDescription) >MAX_DESC_LEN))
	      
	   {	   
	   
	      printf("Wrong data format\n\n");
	      return ERRORCODE;
	      
	   }
	   
	   
	   
	   
	   /* put the pointer to the start of the list*/
	   
	   /*newCat->nextCategory = NULL;
	    newCat->headItem = NULL;
	    newCat->numItems = 0;
	    prevCat = newCat;*/
	    /*
	    currentCat = menu->headCategory;
	    prevCat = NULL;
	    
	   
	    
	    if(prevCat == NULL)
	    {
	       menu->headCategory = newCat;
	       newCat->nextCategory = currentCat;
	    
	    }
	    else
	    {
	       prevCat->nextCategory=newCat;
	       newCat->nextCategory = currentCat;
	    }*/
	    
	  
	    
	   
	      while(currentCat !=NULL)
	   {
	      printf("%s %c %s %s\n", currentCat->categoryID,
	      currentCat->drinkType,currentCat->categoryName,
	      currentCat->categoryDescription);
	      
	      currentCat = currentCat->nextCategory;
	   
	   }
	  
	 
	  
   }  /*end of while loop*/   
      
   while(fgets(tempf2, LINE_LENGTH +2, f1)!=NULL)
   {
           
	   
           currentItem = CategoryType->headItem;
   
	   newItem = malloc(sizeof(ItemType));
	   
	   
           if(prevItem == NULL)
	   {
	     /*  menu->headItem = newItem;*/
	       
	   
	   }
	 
	  
	    
	  
	  
	 
	  
   }  /*end of while loop*/   
   
   /* close both files after reading*/
   if(fclose(f1)!=0 || fclose(f2)!=0)
   {
      fprintf(stderr, "Error in closing files\n");
   }   
  

   return EXIT_SUCCESS;
}


Code:
#ifndef GJC_H
#define GJC_H

/* System-wide header files. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* System-wide constants. */
#define ID_LEN 5
#define MIN_NAME_LEN 1
#define MAX_NAME_LEN 25
#define MIN_DESC_LEN 1
#define MAX_DESC_LEN 250
#define NUM_PRICES 3
#define HOT 'H'
#define COLD 'C'
#define ERRORCODE 1
#define VALID 0
#define LINE_LENGTH 500
#define TOKEN_PRODUCT 4

typedef struct category* CategoryTypePtr;
typedef struct item* ItemTypePtr;

/* Structure definitions. */
typedef struct price
{
   unsigned dollars;
   unsigned cents;
} PriceType;

typedef struct item
{
   char itemID[ID_LEN + 1];
   char itemName[MAX_NAME_LEN + 1];
   PriceType prices[NUM_PRICES];
   char itemDescription[MAX_DESC_LEN];
   ItemTypePtr nextItem;
} ItemType;

typedef struct category
{
   char categoryID[ID_LEN + 1];
   char categoryName[MAX_NAME_LEN + 1];
   char drinkType;      /* (H)ot or (C)old. */
   char categoryDescription[MAX_DESC_LEN];
   CategoryTypePtr nextCategory;
   ItemTypePtr headItem;
   unsigned numItems;
} CategoryType;

typedef struct gjc
{
   CategoryTypePtr headCategory;
   unsigned numCategories;
} GJCType;

int commandLineArguments(int argc, char* argv[]);
int countToken(FILE *fp, char* temp, int tokenPerLine);
#endif
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
I have replied to your thread. Closing duplicate thread.