Поиск объекта внутри структуры на С ++ - PullRequest
0 голосов
/ 02 июня 2018

Я делаю программу для библиотеки, которая может вставлять книгу, отображать всю вставленную книгу и искать специальное название книги в соответствии с введенным пользователем book_code, я сделал 2 из них, но последнийодин (в поиске) не побежит так, как я ожидал ... Если кто-нибудь здесь может мне помочь, я был бы очень признателен.вот код

#include <iostream>
#include <conio.h>
void show_book(const Book &book );
void input_book (Book &book);
int main ()
{
  Book book[10];
  int i,x;
  char search;
  int position,found;
  cout<<"How many book you want to add = "; cin>>x;
  for (i=0; i<x; i++){
    input_book(book[i]);
  }
  for(i=0; i<x; i++){
    show_book(book[i]);
  }
//this is my searching code , im stuck here .. 
  cout<<"\n====== SEARCH ====="<<endl;
  cout <<"Enter book code = "; cin>>search;
  for (i=0; i<x; i++){
  if(book->book_code[i] == search){
    found = 1;
    position = i;
    i = x;
  }
}
  if (found != 0){
    show_book(book[position]);
  } else{
cout<<"The book is not exist";
 }
  return 0;
}
//function declaration...
void show_book(const Book &book){
  cout<<book.book_code<<" | "<<book.book_title<<endl;
}
void input_book(Book &book){
      cout << "Book code : ";cin  >> book.book_code;
      cin.ignore(1, '\n');
      cout << "Book title : " ;getline(cin, book.book_title);
}

теперь этот вывод выглядит как

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

found не инициализируется равным 0 в начале блока поиска.

Пересмотренный код следует

for (i=0,found=0;i<x && !found; ++i)
  if (book[i].book_code == search)
  {
    found = 1;
    position = i;
  }
0 голосов
/ 02 июня 2018

Вы должны изменить

if(book->book_code[i] == search) // accesses 1-st book, namely book[0]

на

if(book[i].book_code == search) // accesses i-th book

Еще лучше, если вы можете использовать std::array, тогда вместо Book book[10]; вы можете написать:

std::array<Book, 10> book;

И отметил в своем комментарии Фрэнк, для search вы должны использовать тот же тип, что и для book_code.

Кроме того, предпочтительнее использовать bool для found переменная:

bool found = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...