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

Wyświetlenie książek przypisanych do ucznia w C przy pomocy listy

0 głosów
56 wizyt
pytanie zadane 12 stycznia w C i C++ przez NightSun221 Nowicjusz (120 p.)

Witam mam za zadanie stworzyć bazę danych w której muszę przypisać książki do poszczególnych uczniów,

Do przechowywania studentów użyłem tablicy structów. Natomiast do przechowywania książek listy jednokierunkowej.

Teraz stworzyłem funkcję która powinna przypisywać książki danemu studentowi. Tworzy ona listę oraz dodaje po kolei książki do listy, do póki użytkownik nie wprowadzi id książki = 0.

void assign_book(STUDENT *student_arr, BOOK *root){ /// PRZYPISANIE KSIAZEK STUDENTOM

BOOK *current_book = root;
ListBooks *current = NULL;
ListBooks *head = NULL;
ListBooks *ptr = NULL;
int i,b_select,count = 0;

do{
    //current_book = root;
    printf("\nPodaj id ksiazki:");
    scanf("%d",&b_select);

    while(current_book != NULL && b_select != 0){
        if(b_select == current_book->id){

            current = (ListBooks*)malloc(sizeof(ListBooks));

            current->count = count;
            current->Book = current_book;
            current->next = NULL;

            count++;

        if(head == NULL){

        head = current;
        }else{

            ptr = head;
            while(ptr->next != NULL)
                ptr = ptr->next;
            ptr->next = current;
            }
        break;
        }else{
        current_book = current_book->next;
        }
    }

}while(b_select != 0);
}

Jednak jest pewien problem ponieważ, gdy chcę wyświetlić listę dostaję błąd:

Program received signal SIGSEGV, Segmentation fault.
In ungetwc () (C:\Windows\System32\msvcrt.dll)

void print_assigned_books(ListBooks *list_of_assigned_books){

ListBooks *current = list_of_assigned_books;

while(current != NULL){
printf("%s",current->Book->author);
current = current->next;
}
}

Tutaj umieszczam funkcję main:

int main(){


BOOK *HEAD = NULL; /// Wskaznik do pierwszego elementu listy
STUDENT S_ARRAY[20]; ///Lista 20 studentów

ListBooks *Ksiazki = S_ARRAY[2].books;

    create_group(&S_ARRAY);
    HEAD = create_library();
    assign_book(&S_ARRAY[2],HEAD); //Funkcja przypisuje książki dla 2-go studenta


printf("\nDISPLAY BOOK:");
printf("\n==========================\n");
    print_assigned_books(Ksiazki); //Funkcja wyświetlająca książki posiadane przez studenta.

return 0;
}

Nie jestem pewien o co chodzi. Gdyż sprawdzając te 2 funkcje debuggerem wszystko jest dobrze w funkcji przypisującej książki, jednak gdy próbuje je wyświetlić dostaję właśnie błąd:

Program received signal SIGSEGV, Segmentation fault.
In ungetwc () (C:\Windows\System32\msvcrt.dll)

Będę wdzięczny jeśli komuś uda się rozwiązać mój problemsmiley

 

1 odpowiedź

0 głosów
odpowiedź 13 stycznia przez j23 VIP (105,900 p.)
STUDENT S_ARRAY[20]; ///Lista 20 studentów
 
ListBooks *Ksiazki = S_ARRAY[2].books;
...


print_assigned_books(Ksiazki);

Na co wskazuje wskaźnik Ksiazki?

 

PS. nazwy zmiennych nie powinny składać się z samych dużych liter.

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Mądrala (6,030 p.)
0 głosów
1 odpowiedź 91 wizyt
0 głosów
1 odpowiedź 66 wizyt
pytanie zadane 26 grudnia 2015 w Inne języki przez programmero Bywalec (2,380 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

65,738 zapytań

112,379 odpowiedzi

237,252 komentarzy

46,695 pasjonatów

Przeglądających: 243
Pasjonatów: 11 Gości: 232

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...