Wyszukiwanie danych w tablicy struktury

0

Witam.
Czy ktoś mógłby mi powiedzieć jak wyszukiwać konkretną osobę w tablicy struktur?
Na początek mam utworzoną strukturę z trzema polami. Potem utworzyłem 5-cio elementową tablicę wcześniej utworzonej struktury. I dwie funkcje gdzie podaje się dane takie jak nick, oraz email.
Funkcja do pobierania danych, oraz wypisania tych danych działa. Ale jak zrobić, żeby program, po podaniu nicku wyszukiwał daną osobę, i wyświetlał nick, oraz e-mail tej osoby? Prosiłbym o odpowiedź bez używania wskaźników.
Kod mojego programu wygląda tak:

#include<iostream>
using namespace std; 
struct pola{
	string nick;
	string email;
};
pola dane[5];
void podaj_dane(){
	for(int i=0; i<5; i++){
		cout<<"Podaj nick numer "<<i+1<<": ";
		cin>>dane[i].nick;
		cout<<"Podaj email: ";
		cin>>dane[i].email;
	}
}
void wypisz_dane(){
	for(int i=0; i<5; i++){
		cout<<"nick numer "<<i+1<<": ";
		cout<<dane[i].nick<<endl;
		cout<<"email: ";
		cout<<dane[i].email<<endl;
	}
}
int main(){
	bool czy_znaleziono;
	podaj_dane();
	wypisz_dane();
	string szukana;
	cout<<"podaj nick szukanej osoby: ";
	cin>>szukana;
	for(int i=0; i<5; i++){
		if(dane[i].nick==szukana){
			cout<<"e-mail szukanej osoby o nicku: "<<szukana<<" to: "<<dane[i].email;
		}
		else{
			czy_znaleziono=false;
		}
	}
	if(czy_znaleziono==false){
		cout<<"nie znaleziono";
	}
	return 0;
}

wyszukać mi jakoś wyszukuje, ale żeby nie wypisywało na końcu frazy nie znaleziono. Tą frazę ma wyświetlać tylko w przypadku jeżeli użytkownik podałby nie właściwą nazwę nicku

0

A gdzie zmienna czy_znaleziono przyjmuje wartość True (i jakie masz zabezpieczenie przez powrotem do False przy następnej strukturze?)? Na twoim miejscu dał bym szukanie do osobnej funkcji, albo dał czy_znaleziono domyślnie na False i zmieniał na True po "trafieniu" (w przypadku braku takowego nic nie robisz).

0

wyszukać mi jakoś wyszukuje, ale żeby nie wypisywało na końcu frazy nie znaleziono. Tą frazę ma wyświetlać tylko w przypadku jeżeli użytkownik podałby nie właściwą nazwę nicku

Popatrz co robi Twój kod i zastanów się kiedy się to wykona, a kiedy nawali;

Deklarujesz na początku głównej funkcji zmienną czy_znaleziono, ale nie inicjujesz jej wartości, aż do samej pętli; Zmień nieco pętlę, coś na ten kształt:

int main()
{
    bool czy_znaleziono;
    podaj_dane();
    wypisz_dane();
    string szukana;

    cout << "podaj nick szukanej osoby: ";
    cin >> szukana;

    for(int i = 0; i < 5; i++)
    {
        czy_znaleziono = (dane[i].nick == szukana);

        if (czy_znaleziono)
        {
            cout << "e-mail szukanej osoby o nicku: " << szukana << " to: " << dane[i].email;
            // tu przerwij pętlę, bo już znaleziono osobę
        }
    }

    if (czy_znaleziono == false)
    {
        cout << "nie znaleziono";
    }

    return 0;
}

Chyba nic nie pokręciłem, ale dawno nie pisałem w C/C++ więc i składnię nieco zapomniałem :]

Możesz też w pętli po znalezieniu osoby zapisać do zmiennej jej indeks w tablicy i wyjść z pętli, a po niej sprawdzić wartość tej zmiennej i jeśli jest np. -1 to wypisz, że nie znaleziono, a jeśli indeks jest nieujemny to wtedy wypisz dane pobrane z tablicy na podstawie indeksu; Tylko nie zapomnij zainicjować sobie wartości zmiennej zaraz przy deklaracji;

Mała uwaga - nie musisz porównywać wartości zmiennej do false; Użyj operatora negacji ! - skrócisz sobie kod.

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