Funkcja porównująca

0

Witam.
Mam funkcję, która poszukuje elementów spełniających dane warunki w tablicy struktur, a potem wyświetla je na ekranie. Dany warunek nazwisko, warunek wiek, warunek wzrost1przedzial i wzrost2przedzial (rekordy mieszczące się między nimi są wypisywane). Jeżeli warunki nazwisko i/lub wiek dostaną wartość 0 to nie porównujemy danych elementów.

Funkcja nie działa mi jednak poprawnie: w if'ach gdzie mam nazwisko != 0, operacje wykonują się i działają poprawnie, a kiedy mam nazwisko == 0, funkcja nie wyświetla niczego - pokazuje się menu programu. Kompilator nic nie krzyczy, a ja sam sprawdzałem już czy aby na pewno dobrze przekazuję dane itd. Nie mam pojęcia, co może być nie tak.

 if(nazwisko != 0 && wiek != 0)
   {
      for(int j=0;j<ile;j++)
      {
         if(!strcmp(tab[j].nazwisko,nazwisko) && tab[j].wiek == wiek && tab[j].wzrost >= wzrost1 && tab[j].wzrost <= wzrost2)
         {
            printf("%s %d %f", tab[j].nazwisko, tab[j].wiek, tab[j].wzrost);
         }
      }
   } else if(nazwisko == 0 && wiek != 0) {
      for(int j=0;j<ile;j++)
      {
         if(tab[j].wiek == wiek && tab[j].wzrost >= wzrost1 && tab[j].wzrost <= wzrost2)
         {
            printf("%s %d %f", tab[j].nazwisko, tab[j].wiek, tab[j].wzrost);
         }
      }
   } else if(nazwisko != 0 && wiek == 0) {
      for(int j=0;j<ile;j++)
      {
         if(tab[j].nazwisko == nazwisko && tab[j].wzrost >= wzrost1 && tab[j].wzrost <= wzrost2)
         {
            printf("%s %d %f", tab[j].nazwisko, tab[j].wiek, tab[j].wzrost);
         }
      }
   } else if(nazwisko == 0 && wiek == 0) {
      for(int j=0;j<ile;j++)
      {
         if(tab[j].wzrost >= wzrost1 && tab[j].wzrost <= wzrost2)
         {
            printf("%s %d %f", tab[j].nazwisko, tab[j].wiek, tab[j].wzrost);
         }
      }
   } 

Dzięki za podpowiedzi.

0

A to nazwisko może być kiedykolwiek równe 0? Czym jest to nazwisko, jakiego typu, wpisujesz gdzieś jawnie do niego 0, czy liczysz na to, że będzie tam 0 z automatu? Jak na mój gust pytając dlaczego jakaś zmienna nie przyjmuje jakiejś wartości i nie pokazując jakiego jest ona typu, ani co wcześniej z nią robisz nie otrzymasz odpowiedzi innej niż: kod działa poprawnie, bo nazwisko nigdy nie przyjmuje wartości == 0.

0

Nazwisko jest zmienną wpisywaną przez użytkownika.
Jest to tablica charów/string 21-elementowy.
Np. chcemy wyszukać wszystkie osoby, które mają 20 lat i mierzą 100-200 cm. Wpisujemy za nazwisko 0, wiek 20 i przedziały wzrostu.
If powinien stwierdzić nazwisko == 0 && wiek != 0 {odpowiednia instrukcja}. Ale tam gdzie spełnione jest nazwisko == 0 funkcja niczego nie wyświetla.

0

Czyli tak jak mówiłem. Nazwisko nigdy nie ma wartości 0. To, że użytkownik wpisuje 0 z klawiatury, nie znaczy, że do tablicy charów jest wpisywane 0 (liczbowe). Jest zapamiętany jeden znak, który wyświetla 0, ale kod ASCII tego znaku jest zupełnie inny.

0

Poradziłem sobie z problemem za pomocą funkcji strcmp().
Dzięki za uwagi, pewnie bym to zostawił gdyby nie Ty.
Piwko.

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