2013-05-09 1 views
0

У меня проблемы с моей moviedatabase, моя функция поиска не работает. Я полный новичок и получил функцию поиска сети, но он не будет искать.Нужна помощь searchfunction для моей moviedatabase C++

Вот мой код.

#include <iostream> 
#include <vector> 
#include <sstream> // För att kunna använda sig av getline() 
#include <string> // För att kunna använda sig av getline() 
#include <algorithm> 

using namespace std; 

class Film 
{ 
public: 
    string Titel; 
    string Typ; 

// FUNKTION: Skriver ut filmens titel och typ 
    void skrivUtFilm() 
    { 
     cout << endl; 
     cout << "Titel: " << Titel << endl; // Skriver ut filmens titel 
     cout << "Typ: " << Typ << endl; // Skriver ut filmens typ 
    } 
}; 

int main() 
{ 
    vector<Film> Databas;    // Skapa en vektor av typen Film 

    Film nyFilm;     // För att kunna skapa en film behöver vi kunna spara den 

    while (true) 
    { 
     // Skriver ut menyn: 
     cout << " === FILMDATABAS === " << endl; 
     cout << "1: Registera en ny film" << endl; 
     cout << "2: S\x94k efter en film" << endl; 
     cout << "3: Skriv ut filmlistan" << endl; 
     cout << "0: Avsluta" << endl; 
     cout << "Ange ditt val: "; 

     char menySelection; // Användarens val 
     cin >> menySelection; 


     if (menySelection == '1') // Registerar nya filmer 
     { 
      cin.get(); 
      cout << "\n\n1: Registrera en ny film\n"; 
      cout << "Vad \x84r filmens Titel: "; 
      getline(cin, nyFilm.Titel); 

      cout << "\x8er filmen p\x86 DVD eller BluRay? "; 
      getline(cin, nyFilm.Typ); 
      cout << endl; 

      // Vi lägger vårt filmobjekt i vektorn 
      Databas.push_back(nyFilm); 
     } 
     else if (menySelection == '2') // Söker efter filmer som användaren har lagt till 
     { 
      cin.get(); 
      cout << "\nS\x94k efter filmer i databasen: \n\n"; 
      string objekt; 
      getline(cin, objekt); 
      cout << endl; 

      vector<Film>::iterator it; 

      it = find_if(Databas.begin(), Databas.end(),[&] (const Film &f) 
      { 
       return (f.Titel == objekt); 
      }); 
     } 
     else if (menySelection == '3') // Skrivet ut alla filmer i Filmarkivet 
     { 
      cout << "\n=========\n"; 
      cout << "Filmlistan\n"; 
      for(int i=0; i<Databas.size(); i++) 
      { 
       Databas[i].skrivUtFilm(); // Skriver ut dem med hjälp av skrivUtFilm(); 
      } 
      cout << "\n=========\n"; 
      cout << "\n\nTryck p\x86 ENTER f\x94r att \x86terv\x84nda till menyn.\n\n"; 
      cin.get(); 
     } 
     else if (menySelection == '0') // Avslutar programmet 
     { 
      break; 
     } 
     else 
     { 
      cout << "Ogiltigt val!\n." << endl; 
     } 
    } 
    cin.get(); 
    return 0; 
} 
+0

Что не работает? Вы не проверяете, что итератор вернулся из find_if, поэтому он может работать нормально, и вы этого не знаете. Линейный поиск просто проходит через вектор и сравнивается с заголовком. Не сложно. –

+0

Вещь, которая не работает, после того, как я зарегистрировал фильм с опцией 1, я хочу найти его в варианте 2, но когда я пишу либо тип, либо название, и нажмите enter, он просто возвращается чтобы снова отобразить меню, не возвращая никакой информации о фильме/типе. Я не знаю, использую ли я неправильный код для того, что я хочу делать. – Giriko

+0

Как я уже сказал, вы ничего не делаете с данными, полученными от вашего поиска. Вам нужно использовать итератор, который 'find_if' возвращает каким-то образом. –

ответ

0

Когда вы найдете фильм, вы ничего не делаете с ним.

После функции поиска, вы должны добавить что-то вроде:

if (it != Databas.end()) { 
    it->skrivUtFilm(); 

} else { 
    cout << "No film found" << endl; 

} 

печатать информацию о фильме, который вы нашли, или сообщение, которое не было найдено ни одного фильма.

+0

Спасибо большое за помощь LPC, он работает в соответствии с назначением, я благодарен вам, что вы нашли время, чтобы помочь мне :) – Giriko

+0

@Giriko Добро пожаловать. – LPCs

 Смежные вопросы

  • Нет связанных вопросов^_^