I am trying to load a few lines ( many strings seperated by a space) from a text file and break them into string tokens and store it as structure fields. This functions should be performed by the load_items(item); function.
However there is an anomaly. When i print the structure fields to check if they have been loaded properly, it turns out they are not!. when i print structure fields outside the load_items(item); function the fields genre, borrower, availability, due_date do not seem to be stored properly in the array.
The following code is the main function and the load_items function.
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct items
{
char name[10];
char call_no[10];
char author[10];
char type[10];
char borrower[10];
char availability[1];
char due_date[8];
char genre[10];
};
int load_items(struct items item[5500]);
int main()
{
struct items item[3];
int total_items;
total_items = load_items(item);
// printf("\n%d\n",total_items);
for(ctr=0;ctr<total_items;ctr++)
{
printf("\n%s ",item[ctr].name);
printf("%s ",item[ctr].call_no);
printf("%s ",item[ctr].author);
printf("%s ",item[ctr].type);
printf("%s ",item[ctr].genre); // error
printf("%s ",item[ctr].borrower);
printf("%s ",item[ctr].availability); // error
printf("%s\n",item[ctr].due_date); // error
}
system("pause > null");
return 0;
}
int load_items(struct items item[3])
{
int total_items=0;
char *string; // string tokens of item_details
char item_details[69];
int ctr;
FILE *items;
items = fopen("items2.txt","r");
if(items == NULL)
{
printf("ERROR : Unable to open file!\n");
return 0;
}
while(fgets(item_details,69,items))
{
string = strtok(item_details," ");
strcpy((item[total_items]).name,string); printf("%s ",item[total_items].name);
string = strtok(NULL," ");
strcpy((item[total_items]).call_no,string); printf("%s ",item[total_items].call_no);
string = strtok(NULL," ");
strcpy((item[total_items]).author,string); printf("%s ",item[total_items].author);
string = strtok(NULL," ");
strcpy((item[total_items]).type,string); printf("%s ",item[total_items].type);
string = strtok(NULL," ");
strcpy((item[total_items]).genre,string); printf("%s ",item[total_items].genre);
string = strtok(NULL," ");
strcpy((item[total_items]).borrower,string); printf("%s ",item[total_items].borrower);
string = strtok(NULL," ");
strcpy((item[total_items]).availability,string); printf("%s ",item[total_items].availability);
string = strtok(NULL,"\n"); // \n is the last characcter in item_details
strcpy((item[total_items].due_date),string); printf("%s\n",item[total_items].due_date);
total_items++;
}
// printf("\n%d",total_items);
fclose(items);
return total_items;
}
Below is the contents of the items2.txt file.
Code:
eng_math cn_4 croft book learning xxxx 1 00/00/00 matlab cn_1 hines book learning xxxx 1 00/00/00

