0

Sorry for posting again guys but i have fixed up teh string copies to copy the data into each struct variable. But still when i traverse through the linked list it does not print out anything after it reads the file. For some reason it may not be copying at all or something any idea's?

i think its because currentCat variables is pointing to NULL rather then a node but im unsure how
to fix it cuz it wont print any of the data which is being loaded

int loadData(GJCType* menu, char* menuFile, char* submenuFile)
{
   /*pointer for malloc*/
   CategoryType *newCat, *currentCat, *prevCat;
   
   

   /*declaration of variables*/
   int CountNoLines = 0;
   char temp[LINE_LENGTH];
   
   /* variables for tokenizer for menu file*/
   char *catID;
   char *catType;
   char *catName;
   char *catDescription;
   char *delim;
   
   /* 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, f1)!=NULL)
   {
       newCat = NULL;
       prevCat = NULL;
       currentCat = NULL;
              
       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");
	   }
	   
	   /*checks for a duplication of the id field*/
	   if(!checkDuplicationID(menu, catID))
	   {
	      return ERRORCODE;
	   }
           /* gets the second field and tokenizez it*/
	   catType = strtok(NULL, "|");
	   
	    /* checking whether it tokenizez*/
	   if(catType == NULL)
	   {
	      printf("CatType missing\n");
	   }
	   
	   catName = strtok(NULL, "|");
	   
	    /* checking whether it tokenizez*/
	   if(catName == NULL)
	   {
	      printf("CatName missing\n");
	   }
	   catDescription = strtok(NULL, "\0");
	   
	    /* 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;
	      
	   }
	   
	   strcpy(newCat->categoryID, catID);
	   newCat->drinkType = catType[0];
	   strcpy(newCat->categoryName, catName);
	   strcpy(newCat->categoryDescription, catDescription);
	   
	   
	   
	   newCat -> nextCategory = NULL;
	   newCat->headItem = NULL;
	   newCat->numItems = 0;
	   prevCat = newCat;
	   
	   currentCat = menu->headCategory;
	   
	}/* end of if else used to tokenize and copy variables
	  from and into structs*/     

	   while(currentCat!=NULL)
	  {
	     printf("%s, %c, %s, %s", currentCat->categoryID,
	     currentCat->drinkType, currentCat->categoryName,
	     currentCat->categoryDescription);
	     
	     currentCat = currentCat->nextCategory;
	  }
	
	   
	
	  
   } /* 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;
}
2
Contributors
1
Reply
3
Views
10 Years
Discussion Span
Last Post by Lerner
0
while(fgets(temp, LINE_LENGTH, f1)!=NULL)
{
   newCat = NULL;
   prevCat = NULL;
   currentCat = NULL;

   newCat = malloc(sizeof(CategoryType));

   if(prevCat == NULL)
   {
       menu->headCategory = newCat;
   }
   else
   {

In the above snippet prevCat is initialized to NULL each time the loop starts to the conditional of the if statement will always be true and the else statement will never be reached.

Edited by pyTony: fixed formatting

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.