[C] Wyswietlanie wartosci w strukturze

robertos18
Użytkownik
Użytkownik
Posty: 423
Rejestracja: 6 paź 2014, o 20:03
Płeć: Mężczyzna
Lokalizacja: Torun
Podziękował: 127 razy
Pomógł: 2 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: robertos18 »

Wartosci 10 i 20 pokazuje poprawie natomiast z 30 jest juz jakis błąd.

Kod: Zaznacz cały

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

struct element{

int wart;
struct element *nast;
};


int main()
{
struct element *poczatek;
poczatek = (struct element *) malloc(sizeof(*poczatek));
(*poczatek).wart=10;
(*poczatek).nast=(struct element *) malloc(sizeof(*poczatek));
(*(*poczatek).nast).wart=20;
(*(*poczatek)).nastt=(struct element *) malloc(sizeof(*poczatek));
(*(*(*poczatek))).nast).wart=30;
printf("%d
",(*poczatek).wart);
printf("%d
",(*(*poczatek).nast).wart);
printf("%d
",(*(*poczatek).nastt).wart);
    return 0;
}
Ostatnio zmieniony 18 kwie 2015, o 15:06 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: SlotaWoj »

Czy aby nie przez błędny desygnator pola nastt w wierszu 18?
robertos18
Użytkownik
Użytkownik
Posty: 423
Rejestracja: 6 paź 2014, o 20:03
Płeć: Mężczyzna
Lokalizacja: Torun
Podziękował: 127 razy
Pomógł: 2 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: robertos18 »

tak o niego chodzi poprawnie musze dopisac jeszcze jeden nawis i wstawic * ?
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: miki999 »

Jeśli mogę sobie pozwolić na ogólne uwagi.

1. Czytelniej jest używać a->b niż (*a).b.
2. Niefajnie jest się pierdzielić z tymi structami. Lepiej jest w takim wypadku zrobić:

Kod: Zaznacz cały

typedef struct
{
    int wart;
    void *nast;
}element
Wtedy nie musisz już nigdzie używać "struct", bo masz zdefiniowany typ.

3. Nie sprawdzasz nigdzie, że udało się zaalokować poprawnie pamięć, co jest brzydką praktyką.

Wracając do problemu:
Zauważ, że nast jest również strukturą typu element, która zawiera kolejne nast, więc musisz coraz bardziej się zagłębiać.

4. Polecam stworzyć sobie tymczasowy wskaźnik, który będzie zawierał adres aktualnego elementu. W ten sposób kod będzie czytelniejszy. Przykładowo będziesz mógł przejść do kolejnego elementu poprzez
currentElement_p = (element *)currentElement_p->nast.

5. Klasycznie ostatni element listy wskazuje na NULL, aby zaznaczyć, że jest to koniec listy.


Pozdrawiam.
robertos18
Użytkownik
Użytkownik
Posty: 423
Rejestracja: 6 paź 2014, o 20:03
Płeć: Mężczyzna
Lokalizacja: Torun
Podziękował: 127 razy
Pomógł: 2 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: robertos18 »

rozumiem, ze są 'ladniejsze' sposoby aby to zrobic ale ja wlasnie chce to wykonac w sposob jaki to napisalem i chce sie tylko dowiedziec co musze poprawic aby wyswietlilo mi ta koljena wartosc.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: SlotaWoj »

„Weź sobie do serca” to, co napisał Miki999, bo program ma mieć „elegancka strukturę” i być czytelny również dla osób postronnych, nie tylko dla autora.
Gdybyś kiedyś stracił miesiąc szukając błędu w cudzym programie, napisanym bezładnie, bez stylu, z mało wymownym nazewnictwem, to byś nie chciał to wykonać w sposób jaki to napisałeś tylko kodował byś programy inaczej; tak aby nie prowokować wystąpienia błędów, a gdy już się zdarzą, były łatwiejsze do wykrycia przez Ciebie, a nam nie zawracał głowy.
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: miki999 »

robertos18 pisze:rozumiem, ze są 'ladniejsze' sposoby aby to zrobic ale ja wlasnie chce to wykonac w sposob jaki to napisalem i chce sie tylko dowiedziec co musze poprawic aby wyswietlilo mi ta koljena wartosc.
A proszę Cię bardzo:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>
 
struct element{
 
int wart;
struct element *nast;
};
 
 
int main()
{
struct element *poczatek;
poczatek = (struct element *) malloc(sizeof(*poczatek));
(*poczatek).wart=10;
(*poczatek).nast=(struct element *) malloc(sizeof(*poczatek));
(*(*poczatek).nast).wart=20;
(*(*poczatek).nast).nast=(struct element *) malloc(sizeof(*poczatek));
(*(*(*poczatek).nast).nast).wart=30;
printf("%d\n",(*poczatek).wart);
printf("%d\n",(*(*poczatek).nast).wart);
printf("%d\n",(*(*(*poczatek).nast).nast).wart);
    return 0;
}
robertos18
Użytkownik
Użytkownik
Posty: 423
Rejestracja: 6 paź 2014, o 20:03
Płeć: Mężczyzna
Lokalizacja: Torun
Podziękował: 127 razy
Pomógł: 2 razy

[C] Wyswietlanie wartosci w strukturze

Post autor: robertos18 »

Dziekuje miki999, nie chodzi o to, ze nie chce się uczyc pisac zgrabniejszych kodow, ja po prostu musze stosowac sie do polecen profesora, bo inaczej nie zaliczy mi zadania jezeli bedzie nie po jego mysli ; )
ODPOWIEDZ