• 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 (108,640 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ź 167 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Mądrala (6,170 p.)
0 głosów
1 odpowiedź 92 wizyt
0 głosów
1 odpowiedź 67 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

67,014 zapytań

113,926 odpowiedzi

241,408 komentarzy

46,959 pasjonatów

Przeglądających: 233
Pasjonatów: 11 Gości: 222

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.

...