Funkcja pozwalająca wyszukać w bazie elementy o zadanych parametrach

0

Witam mam takie oto zadanie: Napisz funkcję pozwalającą wyszukać w bazie elementy o zadanych parametrach np. książka autora Adam Mickiewicz, rok wydania nie starszy niż 1990, o cenie z zadanego przedziału. Mój problem polega w tym, że jak już wpisze elementy do bazy, to funkcja wyszukująca jest w stanie wyszukać tylko ten ostatni element, a pierwszy element, nawet jak podam prawidłowe parametry nie zostaje odnaleziony i program zamyka się. Nie rozumiem gdzie jest błąd.

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

const int N=3;

struct dane{
    char imie [15];
    string nazwisko;
    int wiek;
    static int liczbaElementow;
};

int dane::liczbaElementow = 0;

void wyswietl(dane aOsoba){
    cout << "Imie: " << aOsoba.imie << endl;
    cout << "Nazwisko: " << aOsoba.nazwisko << endl;
    cout << "Wiek: " << aOsoba.wiek << endl;
    cout << "Liczba Elementow: " << dane::liczbaElementow << endl;
}

dane wypelnij(dane &aOsoba){
    cout << "Podaj imie: " << endl;
    cin >> aOsoba.imie;
    cout << "Podaj nazwisko: " << endl;
    cin >> aOsoba.nazwisko;
    cout << "Podaj wiek: " << endl;
    cin >> aOsoba.wiek;
    dane::liczbaElementow++;
    return aOsoba;
}

void wyszukiwanie(dane &aOsoba)
{
    string m, g;
    int l;
    cout << "Kogo szukasz ? " <<endl;
    cin >> m;
    cout << "A moze nazwisko?" <<endl;
    cin >> g;
    cout << "W jakim wieku ?" << endl;
    cin >> l;

    if ((aOsoba.imie == m) && (aOsoba.nazwisko==g) && (aOsoba.wiek==l))
        cout << "Znaleziono: " << aOsoba.imie << ", " << aOsoba.nazwisko << ", " << aOsoba.wiek;


}

int main() {

    dane spisOsob[N];

    for (int i=0; i<N; i++) {
    wypelnij(spisOsob[i]);
    wyswietl(spisOsob[i]);

    }

    wyszukiwanie(spisOsob[N]);

    return 0;
}
2

To co próbujesz zrobić tutaj:

wyszukiwanie(spisOsob[N]);

jest złe. Jeśli Twoje N wynosi 3, to podając 3 jako indeks odwołujesz się do czwartego elementu tablicy: [0, 1, 2] 3 a to już jest błąd.
Z tego właśnie powodu każdy tutaj doradzi Ci używanie standardowych kontenerów, jak std::array, czy std::vector.

2
(aOsoba.imie == m)

To nie jest poprawny sposób porównywania ciągów znaków char *.

Zmień typ pola imie na string lub porównuj inaczej.

0

Dobra dzięki wielkie, zamiana tablic na wektory pomogła:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1