• 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
53 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 (100,260 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ź 158 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Mądrala (5,770 p.)
0 głosów
1 odpowiedź 89 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
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

63,166 zapytań

109,401 odpowiedzi

228,554 komentarzy

42,674 pasjonatów

Przeglądających: 125
Pasjonatów: 12 Gości: 113

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.

...