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

Listy jednokierunkowe nie wyświetla działania funkcji

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
336 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez Roberto12 Nowicjusz (120 p.)
zmienione kategorie 24 stycznia 2021 przez ScriptyChris

Mam problem po napisaniu dwóch funkcji jednej która wyświetlą naszą liste jedno kierunkową a druga która ma dodawać do tej listy dane. Gdy wczytuje te funkcje w mainie i odpalam program to widzę tylko że program się wykonał a ja nic nie mogłem dalej dodać gdzie jest błąd ? Jakby ktoś mógł podpowiedzieć poza tym jak sortować listę po indeksie lub danych ze structu(nazwa lub email lub tel).

#include <stdio.h>
#include <stdlib.h>

typedef struct klient{
    char nazwa[40];
    char email[30];
    char tel[15];
    struct klient * next;
}klient_type ;

void show(klient_type *head)
{
    printf("\n");
    if(head==NULL) printf("List is empty");
    else
    {
        klient_type *current=head;
            do {
            printf("%s\n", current->nazwa);
            printf("%s\n", current->email);
            printf("%s\n", current->tel);
            printf("\n");
            current = current->next;
            }while (current != NULL);

    }
}

void dodaj(klient_type *head)
{
    klient_type *last = head;

    if(head==NULL)
    {
        head=last->next;
    }

    while(last->next!=NULL)
    {
        last=last -> next;
    }

    last->next = (klient_type*)malloc(sizeof(klient_type));

    printf("Podaj nazwe nowego klienta \n");
    gets(last->next->nazwa);
    printf("Podaj email nowego klienta \n");
    gets(last->next->email);
    printf("Podaj telefon nowego klienta \n");
    gets(last->next->tel);


}

int main()
{
    klient_type *head = NULL;
    head = (klient_type *)malloc(sizeof(klient_type));

    dodaj(head);

    show(head);
    return 0;
}

 

komentarz 25 stycznia 2021 przez TOWaD Mądrala (6,480 p.)

to działa ale nie wiem dlaczego

#include <stdio.h>
#include <stdlib.h>
 
typedef struct klient{
    char nazwa[40];
    char email[30];
    char tel[15];
    struct klient * next;
}klient_type ;
 
void show(klient_type *head)
{
    printf("\n");
    if(head==NULL) printf("List is empty");
    else
    {
        klient_type *current=head;
            do {
            printf("%s\n", current->nazwa);
            printf("%s\n", current->email);
            printf("%s\n", current->tel);
            printf("\n");
            current = current->next;
            }while (current != NULL);
 
    }
}
void delete(klient_type *head)
{
    printf("\n");
    if(head==NULL) printf("List is empty");
    else
    {
        klient_type *current=NULL;
            do {
            current=head;
            printf("usuwam nazwa %s\n", current->nazwa);
            printf("usuwam email %s\n", current->email);
            printf("usuwam tel %s\n", current->tel);
            printf("\n");
            head = current->next;
            free(current);
            }while (head != NULL);
 
    }
}
 
void dodaj(klient_type *head)
{
    
   
    if(head==NULL)
    {
        printf("Zarezerwój w mainie pamięć i ją zwolnij w maine \n");
        return;
    }
  klient_type *last = head;
    while(last->next!=NULL)
    {
        last=last -> next;
    }
 
    last->next= malloc(sizeof(klient_type));
    printf("Podaj nazwe nowego klienta \n");
    gets(last->next->nazwa);
    printf("Podaj email nowego klienta \n");
    gets(last->next->email);
    printf("Podaj telefon nowego klienta \n");
    gets(last->next->tel);
    last->next->next=NULL;
    
 
 
}
 
int main()
{
    klient_type *head = NULL;
    head = malloc(sizeof(klient_type));
    head->next=NULL;
 
    dodaj(head);
 
    show(head);
    delete(head);
    free(head);
    
    return 0;
}

 

komentarz 25 stycznia 2021 przez TOWaD Mądrala (6,480 p.)

i jeszcze coś takiego tu

takie warrningi

main.c: In function ‘dodaj’:
main.c:65:5: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
     gets(last->next->nazwa);
     ^~~~
     fgets
/tmp/ccNhl8Wf.o: In function `dodaj':
main.c:(.text+0x1ae): warning: the `gets' function is dangerous and should not be used.

a to bez     fgets(last->next->nazwa,39,stdin);

komentarz 25 stycznia 2021 przez TOWaD Mądrala (6,480 p.)
klient_type **head = NULL; tak zawsze fajniej wygląda, ale jak to za implementować :)
komentarz 25 stycznia 2021 przez Roberto12 Nowicjusz (120 p.)

@forestG.tmp, mi tutaj wyświetla w terminalu tylko gdy wyrzucę z maina funkcję delete a tak jest wszystko ok

komentarz 25 stycznia 2021 przez TOWaD Mądrala (6,480 p.)

A co z pamięcią ??? Chyba jak coś malloc to free lub realloc. Ja sprawdzałem na tym kompilatorze i było ok, ale i tak implementację należało by chyba (bo ja nie wiem jakie wymagania) poprawić.Na tym forum też było dużo na ten temat.

To jest dużo tego i tu  i Praty "Szkoła Programowania" jest fajna kolejka - tylko to kolejka i c++;

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 489 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez gooster88 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 793 wizyt
pytanie zadane 8 maja 2020 w C i C++ przez Dyali56 Nowicjusz (150 p.)
+2 głosów
2 odpowiedzi 159 wizyt

93,440 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 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

...