Hi everyone,
I wrote something like that:
book *library = NULL;
customer *service = NULL;
do
{
printf("**********MENU***********\n");
printf("* #1 List of books *\n");
printf("* #2 Add book *\n");
printf("* #3 Search by title *\n");
printf("* #4 Search by category *\n");
printf("* #5 Search by author *\n");
printf("* #6 Borrow book *\n");
printf("* #7 Dump library *\n");
printf("* #8 Exit *\n");
printf("*************************\n");
printf(">: ");
scanf("%d", &choice);
switch(choice)
{
case 1:
{
countBooks(library) > 0 ? showBooks(library) : printf("##########\nLibrary is empty\n##########\n");
} break;
case 2:
{
library = addFirstBook(2, 13, 124094712, "John", "Bean", "How to be feeling green?", "2001-11-23", "Bean Company");
} break;
case 3: printf("3"); break;
case 4: printf("4"); break;
case 5: printf("5"); break;
case 6: printf("6"); break;
case 7: printf("7"); break;
}
}
while(choice != 8);
Everything is fine if I don't use scanf(). This code is working properly:
short choice;
book *library = NULL;
customer *service = NULL;
if(isEmptyBook(library))
library = addFirstBook(2, 13, 124094712, "John", "Bean", "How to be feeling green?", "2001-11-23", "Bean Company");
library = addBook(library, 3, 93, 363012991, "Keith", "Alison", "Alone in the dark", "2010-06-14", "Glory House");
library = addBook(library, 2, 1, 152402833, "Jenny", "Richardson", "Alone in the light", "2010-07-14", "Rights");
library = addBook(library, 4, 37, 849232157, "Tom", "Simon", "Cats and rats", "2009-03-09", "New World");
library = addBook(library, 1, 14, 987561270, "Keith", "Alison", "Defeat yourself!", "2011-03-25", "Glory House");
library = addBook(library, 1, 104, 781001381, "Mark", "Gimbon", "Stronghold", "2008-04-11", "Bookhouse");
showBooks(library);
printf("\n\nItems: %d", countBooks(library));
showBooks function:
void showBooks(book *header)
{
while(header)
{
printf("-------------------------------------\n");
printf("ISBN: %d | Catalog: %d\n", header->isbn, header->catalog);
printf("-------------------------------------\n");
printf("Title: %s\nAuthor: %s %s\n", header->title, header->authorSurname, header->authorName);
printf("Category: %s\n", categoryName(header->category));
printf("Publisher: %s\nPublished: %s\n", header->publisher, header->published);
printf("Avail.: %d of %d\n", header->free, header->amount);
printf("-------------------------------------\n\n");
header = header->next;
}
}
Implementation with do ... while loop and scanf() is bad becouse program has failure during printing showBooks(). I don't know what happened and I'm sure that reason is scanf(). This is single linked list.
How to solve this?