943,537 Members | Top Members by Rank

Ad:
  • C Discussion Thread
  • Unsolved
  • Views: 2277
  • C RSS
Mar 28th, 2006
0

i can't seem to make my search function work.... help!...

Expand Post »
um... i'm an IT student. i'm still a freshmen though... i'm kinda confused with c programming. i have to make this program using stack. i can add, delete, and view all records but i can't seem to make my search function work. here's my codes, hopw anyone can help. thanks!

#include <stdio.h>

struct bookstore{

char title[15];
char author[15];
int booknum;
char publisher[15];
int quantity;
struct bookstore *end;
};

typedef struct bookstore *book;
book add, first, del,temp;

void insert(void);
void delete(void);
void viewall(void);
book search(void);

main()
{
int choice=0;
do
{
clrscr();
printf("Bookstore Data Entry System\n");
printf("\n[1] Add a Book");
printf("\n[2] Delete a Book");
printf("\n[3] Display Books from Stack");
printf("\n[4] Search");
printf("\n[5] Exit");
printf("\nChoice: ");
scanf("%d",&choice);

switch(choice){
case 1: insert(); break;
case 2: printf("\n\n\n\n");
printf("Latest Entry Deleted.");
delete();
break;
case 3: viewall(); break;
case 4: search(); break;
}
}while(choice != 5);
getch();

}

void insert(void)
{
add = (book)malloc(sizeof(struct bookstore)); fflush(stdin);
printf("\nBook Number: "); scanf("%d",&add->booknum); fflush(stdin);
printf("\nBook Title: "); gets(add->title); fflush(stdin);
printf("\nAuthor: "); gets(add->author); fflush(stdin);
printf("\nQuantity: "); scanf("%d",&add->quantity); fflush(stdin);
printf("\nPublisher: "); gets(add->publisher); fflush(stdin);
add->end = first;
first = add;
}

void delete(void)
{
del = first;
first = first->end;
free(del);
getch();
}

void viewall(void)
{
del = first;
printf("\nBookstore Data Entry System\n\n");
while(del)
{
printf("\nBook Number: %s",del->booknum);
printf("\nBook Title: %s",del->title);
printf("\nAuthor: %s",del->author);
printf("\nQuantity: %d",del->quantity);
printf("\nPublisher: %s",del->publisher);
printf("\n\n");
del = del->end;
}
printf("\n\n");
system("PAUSE");
}

book search(void)
{
int i;
printf("\n\nEnter book number to be SEARCHED: ");
scanf("%d",&i);
booknum = &i;
temp = first;
while(temp != NULL)
{
if(temp->booknum == i)
printf("\nNo record");
else
temp = temp->bookstore;
++i;
}
printf("\nBook Number: %s",del->booknum);
printf("\nBook Title: %s",del->title);
printf("\nAuthor: %s",del->author);
printf("\nQuantity: %d",del->quantity);
printf("\nPublisher: %s",del->publisher);
printf("\n\n");

}


Similar Threads
Reputation Points: 10
Solved Threads: 0
Newbie Poster
cinderella is offline Offline
1 posts
since Mar 2006
Mar 28th, 2006
0

Re: i can't seem to make my search function work.... help!...

i think so the program is perfect check if there is an linking problem from your side
Reputation Points: 13
Solved Threads: 2
Junior Poster
Vinoth is offline Offline
125 posts
since Jun 2004
Mar 28th, 2006
0

Re: i can't seem to make my search function work.... help!...

>i think so the program is perfect
Then you're not qualified to help. The code is *horrible* in so many ways. However, because I'm pressed for time, I'll refrain from describing all of the problems in detail and focus only on the search function.

>booknum = &i;
What's this?

>if(temp->booknum == i)
>printf("\nNo record");
Wait, you're searching for a book number equal to i, so why do you say there are no records when you find it?

>printf("\nBook Number: %s",del->booknum);
booknum is an integer. Printing it as a string is bad news. Also, at this point del will be a null pointer, which is even more bad news.

>++i;
Why on earth are you modifying your search key?

Try this instead:
  1. book search(void)
  2. {
  3. int i;
  4. printf("\n\nEnter book number to be SEARCHED: ");
  5. scanf("%d",&i);
  6. temp = first;
  7. while(temp != NULL) {
  8. if(temp->booknum == i) {
  9. printf("\nBook Number: %d",temp->booknum);
  10. printf("\nBook Title: %s",temp->title);
  11. printf("\nAuthor: %s",temp->author);
  12. printf("\nQuantity: %d",temp->quantity);
  13. printf("\nPublisher: %s",temp->publisher);
  14. printf("\n\n");
  15. break;
  16. }
  17. temp = temp->end;
  18. }
  19.  
  20. if ( temp == NULL )
  21. printf ( "No record\n" );
  22.  
  23. return temp;
  24. }
Of course, it's much better to avoid doing I/O in a utility function. You would be better off passing the search key as an argument and returning the found item, or NULL. Then the calling function can use that information as it pleases rather than having the search function force potentially undesired behavior:
  1. book search(int key)
  2. {
  3. temp = first;
  4.  
  5. while ( temp != NULL ) {
  6. if ( temp->booknum == key )
  7. break;
  8. temp = temp->end;
  9. }
  10.  
  11. return temp;
  12. }
Administrator
Reputation Points: 6442
Solved Threads: 1393
Bad Cop
Narue is offline Offline
11,807 posts
since Sep 2004

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C Forum Timeline: printing double array formatting trouble
Next Thread in C Forum Timeline: Small problem with command line





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC