program c, struktury

Kocurka
Użytkownik
Użytkownik
Posty: 178
Rejestracja: 4 lut 2007, o 00:57
Płeć: Kobieta
Lokalizacja: Tarnów
Podziękował: 130 razy

program c, struktury

Post autor: Kocurka »

Mam prosty program tworzący listę uczniów. Prosiłabym o dokładne wyjaśnienie zapisu:(wsk+n)->imie. Konkretnie chodzi mi o to, dlaczego we wczytywaniu oraz wyświetlaniu zapis ten jest taki sam (jak dla mnie scanf "czeka" na adres, a printf na nazwę zmiennej,więc np przy wskaźnikach trzeba było pamiętać o * ) Przepraszam za mało specjalistyczny język =] i będę bardzo wdzięczna za pomoc =]

Kod: Zaznacz cały

#pragma hdrstop
#include <stdlib.h>

struct student
{
char imie[20];
char nazwisko[20];
};

#pragma argsused
int main(int argc, char* argv[])
{
int ile;
struct student *wsk;
int n;
printf("Ile studentow chcesz umiescic na liscie?\n");
scanf("%d",&ile);

wsk=malloc(ile*sizeof(struct student));

if(wsk!='NULL')
{
for(n=0;n<ile;n++)
        {
        scanf("%s",(wsk+n)->imie);
        scanf("%s",(wsk+n)->nazwisko);
        }
for(n=0;n<ile;n++)
        {
        printf("%s %s\n",(wsk+n)->imie,(wsk+n)->nazwisko);


        }


free(wsk);
wsk='NULL';
}



system("pause");


        return 0;
}
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

program c, struktury

Post autor: soku11 »

Poprzez operację (wska+n)->imie oraz (wsk+n)->nazwisko otrzymujesz adres pierwszego elementu tablic typu char. A dlaczego? Bo nazwa tablicy jest również jej adresem. W scanf to nam wystarczy. Potrzebny jest nam przecież wskaźnik. W funkcji printf z parametrem "%s" oczekujesz ciągu znaków, czyli też wskaźnika. Ogólnie polecam korzystanie z bardziej przejrzystych zapisów, czyli:
wsk[n].imie

Pozdrawiam.
ODPOWIEDZ