• 4 odgovora
  • 3.415 pregleda
Unos podataka u strukturu uz pomoc pointera 15.06.2013. u 03:07 · pre 162 meseci #1
Poceo sam da ucim C ali sam zapeo oko jednog problema.
Naime hteo bih da unesem podatke koji su definisani u strukturi i da kasnije ispisem rezultat. Stigao sam do ovog koda.

Code:
#include <stdio.h>
typedef struct student {
    char ime[30];
    char prezime[30];
    int godine;
}Student;

main() {
    Student zp[3];
    Student *p;
    int i;

    p = &zp;

    for(i=0; i<2; i++) {
        printf("Unesite ime, prezime i godiste za studenta %d:", i+1);
        scanf("%s%s%d", &p->ime, &p->prezime, &p->godine);
    }

    for(i=0; i<2; i++) {
        printf("Student %d: %s %s %d\n", i+1, p->ime, p->prezime, p->godine);
        
    }
    system("PAUSE");
}


E sad da li me moze neko uputiti kako dalje posto sam pokusavao varijantama p[ i ]->ime ali to ne daje zeljene rezultate. Znam ja kako bi to resio bez upotrebe pointera na strukturu, ali me interesuje resenje na ovakav nacin.
Re: Unos podataka u strukturu uz pomoc pointera 15.06.2013. u 05:05 · pre 162 meseci #2
p = &zp; // p pokazuje na prvi clan niza
p++; // uveca p za sizeof(*p), tj. p sada ukazuje na drugi clan niza zp

Ubaci samo
p++;
u for petlju posle ucitavanja/ispisivanja.
Re: Unos podataka u strukturu uz pomoc pointera 15.06.2013. u 18:09 · pre 162 meseci #3
Ako sam te dobro razumeo, a mislim da jesam potrebno je ovako da izmenim kod u obe for petlje da izgleda ovako

Code:
    for(i=0; i<2; i++) {
        printf("Student %d: %s %s %d\n", i+1, p->ime, p->prezime, p->godine);
        p++;
    }


Medjutim ni to mi ne daje zeljene rezultate vec mi ispise nesto skroz random nakon unosa podataka.
Re: Unos podataka u strukturu uz pomoc pointera 15.06.2013. u 18:55 · pre 162 meseci #4
Nema potrebe da scanf-u prosledjujes &p->ime i &p->prezime posto je char[30] u sustini vec pointer na prvi karakter ..
Inkrementiraj pointer kao sto ti je @Dexic rekao
Daklle ..
Code:
 
 for(i=0; i<2; i++) {
        printf("Unesite ime, prezime i godiste za studenta %d:", i+1);
        scanf("%s%s%d", p->ime, p->prezime, &p->godine);
        p++;
    }
Potpis
Viva lollapalooza
Re: Unos podataka u strukturu uz pomoc pointera 15.06.2013. u 18:59 · pre 162 meseci #5
Moras i ovde da inkrementiras pointer:

Code:


for(i=0; i<2; i++)
    {
        printf("Unesite ime, prezime i godiste za studenta %d:", i+1);
        scanf("%s%s%d", &p->ime, &p->prezime, &p->godine);
        p++;
    }



Losa stvar oko ovoga je da posle izvrsavanja ovog koda p ne ukazuje vise, kao sto bi mozda ocekivao, na prvi element zp niza posto je adresa na koju pokazuje pomerena na 3. element niza.
Jedno resenje je da posle gornjeg koda opet stavis:

p = &zp;

tako da p opet ukazuje na prvi element da bi kasnije pravilno odstampao vrednosti.

Evo i drugacijeg resenja koje je cistije:

Code:


#include <stdio.h>
typedef struct student {
    char ime[30];
    char prezime[30];
    int godine;
}Student;

main() {
    Student zp[3];
    Student *p;
    int i;

    p = &zp;

    for(i=0; i<2; i++) {
        printf("Unesite ime, prezime i godiste za studenta %d:", i+1);
        scanf("%s%s%d", &p[i].ime, &p[i].prezime, &p[i].godine);
    }

    for(i=0; i<2; i++) {
        printf("Student %d: %s %s %d\n", i+1, p[i].me, p[i].prezime, p[i].godine);
        
    }
    system("PAUSE");
}


Potpis
EOF
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme