How do you read from a file into an array of struct?

Posted by Thomas.Winsnes on Stack Overflow See other posts from Stack Overflow or by Thomas.Winsnes
Published on 2010-05-09T09:11:20Z Indexed on 2010/05/09 9:18 UTC
Read the original article Hit count: 345

Filed under:
|

I'm currently working on an assignment and this have had me stuck for hours. Can someone please help me point out why this isn't working for me?


struct book
{
  char title[25];
  char author[50];
  char subject[20];
  int callNumber;
  char publisher[250];
  char publishDate[11];
  char location[20];
  char status[11];
  char type[12];
  int circulationPeriod;
  int costOfBook;
}; 

void PrintBookList(struct book **bookList)
{
  int i;
  for(i = 0; i < sizeof(bookList); i++)
  {
    struct book newBook = *bookList[i];
    printf("%s;%s;%s;%d;%s;%s;%s;%s;%s;%d;%d\n",newBook.title, newBook.author, newBook.subject, 
        newBook.callNumber,newBook.publisher, newBook.publishDate, newBook.location, newBook.status, 
        newBook.type,newBook.circulationPeriod, newBook.costOfBook);

  }
}

void GetBookList(struct book** bookList)
{
  FILE* file = fopen("book.txt", "r");
  struct book newBook[1024];
  int i = 0;

  while(fscanf(file, "%s;%s;%s;%d;%s;%s;%s;%s;%s;%d;%d",
        &newBook[i].title, &newBook[i].author, &newBook[i].subject, 
        &newBook[i].callNumber,&newBook[i].publisher, &newBook[i].publishDate, 
        &newBook[i].location, &newBook[i].status,
        &newBook[i].type,&newBook[i].circulationPeriod, &newBook[i].costOfBook) != EOF)
  {
    bookList[i] = &newBook[i];
    i++;
  }

  /*while(fscanf(file, "%s;%s;%s;%d;%s;%s;%s;%s;%s;%d;%d",
    &bookList[i].title, &bookList[i].author, &bookList[i].subject,
    &bookList[i].callNumber, &bookList[i].publisher, &bookList[i].publishDate,
    &bookList[i].location, &bookList[i].status, &bookList[i].type,
    &bookList[i].circulationPeriod, &bookList[i].costOfBook) != EOF)
  {
    i++;
  }*/

  PrintBookList(bookList);

  fclose(file);
}

int main()
{
  struct book *bookList[1024];
  GetBookList(bookList);
}

I get no errors or warnings on compile

it should print the content of the file, just like it is in the file. Like this:

OperatingSystems Internals and Design principles;William.S;IT;741012759;Upper Saddle River;2009;QA7676063;Available;circulation;3;11200 Communication skills handbook;Summers.J;Accounting;771239216;Milton;2010;BF637C451;Available;circulation;3;7900 Business marketing management:B2B;Hutt.D;Management;741912319;Mason;2010;HF5415131;Available;circulation;3;1053 Patient education rehabilitation;Dreeben.O;Education;745121511;Sudbury;2010;CF5671A98;Available;reference;0;6895
Tomorrow's technology and you;Beekman.G;Science;764102174;Upper Saddle River;2009;QA76B41;Out;reserved;1;7825
Property & security: selected essay;Cathy.S;Law;750131231;Rozelle;2010;D4A3C56;Available;reference;0;20075
Introducing communication theory;Richard.W;IT;714789013;McGraw-Hill;2010;Q360W47;Available;circulation;3;12150
Maths for computing and information technology;Giannasi.F;Mathematics;729890537;Longman;Scientific;1995;QA769M35G;Available;reference;0;13500
Labor economics;George.J;Economics;715784761;McGraw-Hill;2010;HD4901B67;Available;circulation;3;7585
Human physiology:from cells to systems;Sherwood.L;Physiology;707558936;Cengage Learning;2010;QP345S32;Out;circulation;3;11135
bobs;thomas;IT;701000000;UC;1006;QA7548;Available;Circulation;7;5050

but when I run it, it outputs this:

OperatingSystems;;;0;;;;;;0;0
Internals;;;0;;;;;;0;0
and;;;0;;;;;;0;0
Design;;;0;;;;;;0;0
principles;William.S;IT;741012759;Upper;41012759;Upper;;0;;;;;;0;0
Saddle;;;0;;;;;;0;0
River;2009;QA7676063;Available;circulation;3;11200;lable;circulation;3;11200;;0;;;;;;0;0
Communication;;;0;;;;;;0;0

Thanks in advance, you're a life saver

© Stack Overflow or respective owner

Related posts about c

    Related posts about beginner