[ MPesic @ 15.06.2013. 03:07 ] @
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.
[ Dexic @ 15.06.2013. 05:05 ] @
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.
[ MPesic @ 15.06.2013. 18:09 ] @
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.
[ deerbeer @ 15.06.2013. 18:55 ] @
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++;
    }
[ glorius @ 15.06.2013. 18:59 ] @
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");
}