ďťż

Ładny brzuch

Piszę sobie prostą bazę w czystym c++. Wszystkie dane zapisuje w wektorze (vector<string> dane) dane. Każdy rekord ma 6 pól. Do pliku zapisuje je w następujący sposób.

jan#kowalski#grunwaldzka#33/4#warszawa#00-001# //tutaj znak konca linii.

Mam funkcje, które odczytują i zapisują dane i wiem na pewno, że działają one dobrze, ponieważ jeśli wykorzystuje je do innych zadań (dodawanie, edycja, usuwanie, zapis rekordów) to spisują się dobrze. Teraz przyszła pora, żeby do mojej bazy dodać funkcje wyszukiwania w niej danych. Wymyśliłem sobie, że do funkcji będę przekazywał argument, który informuje funkcje pod jakim kątem chcę przeszukać bazę. I tak argument kryterium przyjmie następujące wartości:
dla imie = 0
dla nazwisko = 1
dla ulica = 2
dla nr domu = 3
itp.

Drugi argument przekazywany do funkcji do szukaj - czyli łańcuch zawierający szukaną.

Tutaj jest kod tej funkcji: http://rafb.net/past...s/kLBhUW62.html

Wiem, że wyjaśnienia są zbędne (nawet dla średniozaawansowanych użytkowników, ale sądzę, że mogą przyspieszyć zrozumienie mojej funkcji).
Niestety - korzystając z tego kodu nie mogę nic wyszukać, tzn. mogę, ale tylko pierwszy rekord. Jeśli wpiszę poprawnie np. imię z pierwszego rekordu, to ten rekord jest pokazywany, ale jeśli wpiszę imię np. z drugiego rekordu, to już niestety nic się nie dzieje. Miał ktoś może podobny problem, macie może jakieś wskazówki, porady? Może tu są jakieś błędy? Jeśli ktoś mógłby mi pomóc, to bardzo proszę.



Posiedziałem nad tym i chyba znalazłem błąd jest on na linii 8:
for(int j=i-kryterium; j<ileRek; j++)
Z tego co wyczytałem to ileRek jest wartością stałą i ma 6. Więc jeżeli danych jest więcej niż sześć (np. są 2 rekordy - i będzie miało 12 ), a kryterium będzie miało 1 to:
j będzie miało wartość 12 - 1 = 11.
for sprawdzi warunek czyli i musi być mniejszy od ileRek, czyli j = 11, a ileRek = 6
11 < 6 == false :) tu jest błąd który przerywa pętle

Poprawką będzie:
for(int j = i - kryterium; j < (i + ileRek); j++)
Użytkownik Real_Noname edytował ten post 09 marzec 2005, 16:45
Ok, WIELKIE DZIĘKI!!! Wskazałeś mi miejsce mojego błędu, ale zapomniałeś o jednym szczególe, otóż napisałeś, że tak jest poprawnie: [/CODE]for(int j = i - kryterium; j < (i + ileRek); j++) a powinno być tak: for(int j = i - kryterium; j < i-kryterium + ileRek); j++) [CODE]
Ale to już teraz nie ma znaczenia...

A swoją drogą, to byłem na twojej stronie - właśnie użycie beepow w petli pozwolilo mi na zdiagnozowanie, co może być źle. Nie wiedziałem, że tak można :). Stronka OK.

jeszcze raz dzięki.


Ok, WIELKIE DZIĘKI!!! Wskazałeś mi miejsce mojego błędu, ale zapomniałeś o jednym szczególe, otóż napisałeś, że tak jest poprawnie: [/CODE]for(int j = i - kryterium; j < (i + ileRek); j++) a powinno być tak: for(int j = i - kryterium; j < i-kryterium + ileRek); j++) [CODE]
Ale to już teraz nie ma znaczenia...

A swoją drogą, to byłem na twojej stronie - właśnie użycie beepow w petli pozwolilo mi na zdiagnozowanie, co może być źle. Nie wiedziałem, że tak można :). Stronka OK.

jeszcze raz dzięki.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •