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

Dlaczego psuje mi się program?

VPS Starter Arubacloud
0 głosów
180 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 (195,220 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 (195,220 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 (195,220 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ź 151 wizyt
pytanie zadane 19 czerwca 2017 w HTML i CSS przez Mistrz0000000 Bywalec (2,780 p.)
0 głosów
0 odpowiedzi 181 wizyt
0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 9 listopada 2020 w C i C++ przez tonn204 Mądrala (7,470 p.)

92,972 zapytań

141,936 odpowiedzi

321,171 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...