Hey guys im reading in a text file with several fields iv tokenized
the '|' so that it only reads the fields categoryId, drinkType, the categoryName, and categoryDescription.
My question is how come when i read the file and copy the reading buffer
"temp" into each struct it does not print out each line in the text file it prints nothing. I traverse through the list and try to print it out?
C0001|H|Espresso Classics|The traditional espresso favourites
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 = 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, temp);
newCat->drinkType = temp[0];
strcpy(newCat->categoryName, temp);
strcpy(newCat->categoryDescription, temp);
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;
}
#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