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

Dlaczego psuje mi się program?

Object Storage Arubacloud
0 głosów
168 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez wihajster Początkujący (460 p.)
edycja 19 stycznia 2019 przez wihajster
typedef struct ListElement {
    int x;
    struct ListElement* pop;
    struct ListElement* nast;
} *liczba_t;
liczba_t dodaj_tyl(liczba_t l, int nr)
{
    if(l==NULL) {
    	liczba_t nw = malloc(sizeof *nw);
   		nw->x = nr;
   		nw->pop=NULL;
    	nw->nast = NULL;
    	return nw;
	} else {
		liczba_t tmp = l;
        while( tmp->nast != NULL )
        {
            tmp = tmp->nast;
        }
            tmp->nast= malloc( sizeof * (tmp->nast) );
            tmp->nast->x= nr;
            tmp->nast->nast= NULL;
            tmp->nast->pop = tmp;
        return l;
	}

}
void pokaz(liczba_t l)
{
    printf("\n");
    if(l==NULL) printf("List is empty");
    else
    {
        liczba_t tmp=l;
        while(tmp->nast!=NULL)
        {
            printf("%d",tmp->x);
            tmp = tmp->nast;
        }
        printf("%d",tmp->x);
    }
}
liczba_t* definiuj_liczby(FILE* we, ile_t struktura)
{
    fscanf(we,"%d",&struktura->ile_liczb);
    fscanf(we,"%d",&struktura->ile_znak);
    //printf("%d\n",ile_znak);
    liczba_t* liczby = malloc(struktura->ile_liczb*sizeof(liczba_t));
    int y;
    for(int i=0; i <struktura->ile_liczb; i++)
    {
        for(int j=0; j<struktura->ile_znak; j++)
        {
            fscanf(we,"%d ",&y);
            //printf("%d",x);
            liczby[i] = dodaj_tyl(liczby[i],y);
            pokaz(liczby[i]);
        }
        printf("\n");
        printf("xd");
    }
    fclose(we);
    return liczby;
}

Psuje się w momencie, gdy próbuję wypisać listę w ostatniej funkcji. Wypisują mi się jakieś losowe liczby. struktura->ile_liczb i struktura->ile_znak są czytane poprawnie. Jak próbowałam wypisać y, też wypisywało się poprawnie. Jedynie przy funkcji "pokaz" coś szwankuje. O co może chodzić, bo już naprawdę nie mam pomysłu.

1 odpowiedź

+1 głos
odpowiedź 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)
wybrane 20 stycznia 2019 przez wihajster
 
Najlepsza
void pokaz(liczba_t l)
{
	printf("\n");

	if(l == NULL) 
	{ 
		printf("List is empty"); 
		return; 
	}

	while(l != NULL)
	{
		printf("%d", l->x);
		l = l->nast;
	}
}

 

W funkcji definiuj_liczby wyzeruj tablicę wskaźników liczby. Bez tego tablica może zawierać przypadkowe wartości.

komentarz 19 stycznia 2019 przez wihajster Początkujący (460 p.)
Przecież nie wypisujesz w ten sposób ostatniego elementu listy
komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)
Dlaczego tak sądzisz?
komentarz 19 stycznia 2019 przez wihajster Początkujący (460 p.)
A dobra. Przepraszam, nie zauważyłam, że sprawdzasz l zamiast l->nast. Ale mimo wszystko nie wiem czy to coś zmieni w działaniu mojego programu, bo sposób w jaki ja robiłam też był prawidłowy
komentarz 19 stycznia 2019 przez j23 Mędrzec (194,920 p.)
Zmieniłem nieco odpowiedź. Sprawdź.
komentarz 20 stycznia 2019 przez wihajster Początkujący (460 p.)
Chodziło o wyzerowanie wskaznikow, dzięki za pomoc. Pewnie dużo czasu zajęłoby mi dopatrzenie się tego.

Podobne pytania

0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 19 czerwca 2017 w HTML i CSS przez Mistrz0000000 Bywalec (2,780 p.)
0 głosów
0 odpowiedzi 158 wizyt
0 głosów
0 odpowiedzi 106 wizyt
pytanie zadane 9 listopada 2020 w C i C++ przez tonn204 Mądrala (7,440 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 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!

...