| | |
struct linked list problem
![]() |
•
•
Join Date: Mar 2006
Posts: 28
Reputation:
Solved Threads: 0
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
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
C Syntax (Toggle Plain Text)
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; }
C Syntax (Toggle Plain Text)
#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
•
•
Join Date: Apr 2006
Posts: 26
Reputation:
Solved Threads: 0
Your coping the same value (temp) for all the fileds :
You should use the pointers you saved like for example :
Another thing :
Automatic variables inside a fucntion are initailzed to garabge.
You forgot to initalize prevCat before you test it
against a NULL.
C Syntax (Toggle Plain Text)
strcpy(newCat->categoryID, temp); newCat->drinkType = temp[0]; strcpy(newCat->categoryName, temp); strcpy(newCat->categoryDescription, temp);
You should use the pointers you saved like for example :
C Syntax (Toggle Plain Text)
strcpy(newCat->categoryDescription, catDescription);
Another thing :
Automatic variables inside a fucntion are initailzed to garabge.
C Syntax (Toggle Plain Text)
CategoryType *newCat, *currentCat, *prevCat;
against a NULL.
![]() |
Similar Threads
- linked list problem!!! (C)
- Doubly Linked List Problem (C++)
- Linked list (C++)
- Linked List problem (C)
- The C++ LINKED LIST (C++)
- remove method linked list (C)
- Linked List & Objects (C++)
Other Threads in the C Forum
- Previous Thread: need help in animal game guessing
- Next Thread: more linked list printing problems
| Thread Tools | Search this Thread |
* adobe ansi api array asterisks binarysearch calculate centimeter char character cm convert copyanyfile copyimagefile copypdffile cprogramme createcopyoffile createprocess() csyntax directory feet fflush fgets file floatingpointvalidation fork frequency function getlasterror getlogicaldrivestrin givemetehcodez global graphics gtkgcurlcompiling gtkwinlinux hacking highest homework i/o inches infiniteloop interest intmain() kilometer km linked linkedlist linux linuxsegmentationfault list locate logical_drives match meter microsoft mqqueue mysql number oddnumber odf open opendocumentformat openwebfoundation owf pattern pdf performance posix power probleminc program programming pyramidusingturboccodes read recv recvblocked repetition scanf scheduling segmentationfault send single socketprograming socketprogramming stack standard strchr string suggestions systemcall unix urboc user variable voidmain() wab whythiscodecausesegmentationfault win32api windows.h





