• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie wyszukiwanych elementów w liście jednokierunkowej język C.

Object Storage Arubacloud
0 głosów
325 wizyt
pytanie zadane 8 czerwca 2017 w C i C++ przez Piotr97 Nowicjusz (120 p.)

Witam otóż mój problem polega na tym ,że gdy wyszukuję dany element w moim programie (ma 3 struktury) np. po ID to gdy chcę wyszukać np.2 ID to wypisuje mi dane tylko z pierwszego ID oraz gdy chce wyszukać artystę ,gatunek lub też inny ciąg znaków to w ogóle nie wypisuje mi danych oto funkcje odpowiadające za szukanie(void szukanie) i za wyświetlanie(void szukanie_pomoc):

void szukanie_pomoc(struct album *head, struct album *head_album, struct artysta *head_artysta, struct gatunek *head_gatunek, int licznik)
{
    struct artysta *artysta_pomoc = head_artysta;
    struct gatunek *gatunek_pomoc = head_gatunek;

    printf("ID: %d\n", head_album->id);
    printf("Tytul: %s\n", head_album->tytul);
    printf("Artysci tego albumu:\n");
    while(artysta_pomoc)
    {
        if(artysta_pomoc->id_album==head_album->id)
        {
            printf("   %d. %s %s\n", licznik, artysta_pomoc->imie, artysta_pomoc->nazwisko);
            licznik++;
        }
        artysta_pomoc=artysta_pomoc->next;
    }
    licznik=1;
    printf("Gatunki tego albumu:\n");
    while(gatunek_pomoc)
    {
        if(gatunek_pomoc->id_albumu==head_album->id)
        {
            printf("   %d. %s\n", licznik, gatunek_pomoc->nazwa);
            licznik++;
        }
        gatunek_pomoc=gatunek_pomoc->next;
    }
    printf("Rok: %d\n", head_album->rok);
    printf("Kupiony: %s\n",head_album->stan == 1?"Tak":"Nie");                  
    printf("Przesluchany: %s\n\n", head_album->przesluchany == 1?"Tak":"Nie");
    head_album = head_album->next;
    return;


}

void szukanie(struct album *head, struct album *head_album, struct artysta *head_artysta, struct gatunek *head_gatunek)
{
    int licznik=1;
    int id1, opcja, rok1;
    char artysta1[20], tytul1[20],gatunek1[20];
    printf("1.Wyszukiwanie po ID\n 2.Wyszukiwanie po nazwisku lub imieniu artysty.\n 3.Wyszukiwanie po tytule.\n 4.Wyszukiwanie po roku wydania albumu.\n 5.Wyszukiwanie po nazwie gatunku.\n");
    printf("Twoj wybor:\n");
    scanf("%d", &opcja);
    switch(opcja)
    {
    case 1:
        system("CLS");
        printf("Wprowadz id ktore chcesz znalezc.\n");
        scanf("%d", &id1);
        while(head)
        {
            if(head->id==id1)
            {
                szukanie_pomoc(head, head_album, head_artysta, head_gatunek, licznik);

            }
            head = head->next;
        }
        printf("Id nie istnieje.\n");
        break;
    case 2:
        system("CLS");
        printf("Wprowadz imie lub nazwisko artysty ktorego chcesz znalezc.\n");
        scanf("%s", &artysta1);
        while(head)
        {
            if (strcmp(head_artysta->imie ,artysta1) == 0 || strcmp(head_artysta->nazwisko ,artysta1) == 0)
            {
                szukanie_pomoc(head, head_album, head_artysta, head_gatunek, licznik);

            }
            head = head->next;
        }
        printf("Artysta o podanym nazwisku lub iminiu nie istnieje.\n");
        break;
    case 3:
        system("CLS");
        printf("Wprowadz tytul ktory chcesz znalezc.\n");
        scanf("%s", &tytul1);
        while(head)
        {
            if (strcmp(head->tytul, tytul1) == 0)
            {
                szukanie_pomoc(head, head_album, head_artysta, head_gatunek, licznik);
            }
            head = head->next;
        }
        printf("podany tytul nie istnieje.\n");
        break;
    case 4:
        system("CLS");
        printf("Wprowadz rok wydania albumu ktory chcesz odnalezc.\n");
        scanf("%d", &rok1);
        while(head)
        {
            if (head->rok == rok1)
            {
                szukanie_pomoc(head, head_album, head_artysta, head_gatunek, licznik);

            }
            head = head->next;
        }
        printf("Podany rok wydania nie istnieje.\n");
        break;
    case 5:
        system("CLS");
        printf("Wprowadz nazwe gatunku ktorego chcesz odnalezc.\n");
        scanf("%s", &gatunek1);
        while(head)
        {
            if (strcmp(head_gatunek->nazwa, gatunek1) == 0)
            {
                szukanie_pomoc(head, head_album, head_artysta, head_gatunek, licznik);

            }
            head = head->next;
        }
        printf("Podany gatunek nie istnieje.\n");
        break;
    }
}

 

2 odpowiedzi

0 głosów
odpowiedź 9 czerwca 2017 przez j23 Mędrzec (194,920 p.)
A debuggera nie możesz użyć? Po to on w końcu jest, żeby sprawdzić, krok po kroku, jak działa problematyczny fragment kodu.
0 głosów
odpowiedź 9 czerwca 2017 przez Wiciorny Ekspert (270,170 p.)

Trudno mi powiedzieć bo nie znam calego kodu i nie wiem co debugger i consola na to, ale generalnie jak funkcja wypisywania ma znać 

 head_artysta;
 head_gatunek;  

// skoro te dwa elementy sa lokalnie w jednej funkcji wyżej 

jeśli to są zmienne struktury globalne, to  i tak nie bedzie wiadomo o który wskaźnik chodzi i przez to program zawsze bedzie odwoływał się do początku 

komentarz 10 czerwca 2017 przez Piotr97 Nowicjusz (120 p.)
Ok już sobie poradziłem wystarczyło usunąć w funkcji szukaj stuct album *head .

Podobne pytania

0 głosów
2 odpowiedzi 2,559 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez k222 Nałogowiec (30,150 p.)
0 głosów
0 odpowiedzi 140 wizyt
0 głosów
1 odpowiedź 358 wizyt
pytanie zadane 19 kwietnia 2018 w PHP przez Wawrick10p Początkujący (370 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...