[ MDBistabil @ 04.02.2012. 10:09 ] @
Pomoć ljudi! Zapeo sam na zadatku.Ideja je da se otvori datoteka (txt),u kojoj se u svakom redu nalaze koordinate x,y,z te sve koordinate iz datoteke spreme u niz struktura,i kasnije ispišu.Zvuci lagano,radio sam zadatke slicnog tipa,ali kako sam shvatio u ovom zadatku moram koristiti funkciju REALLOC zbog toga sto ne znam koliko ce u txt-datoteci biti koordinata(redova),pa sam alocirao memoriju za nekih 5 redova,i kasnije se ta memorija realocira sa realloc-om,a pošto rijetko radimo zadatke sa REALLOC-om,sumnjam da mi je tu negdje greška.Molim za pomoć.

Tekst zadatka:
Zadana je datoteka koordinate.txt u kojoj se u svakom redu nalazi x, y i z
koordinata tocke. Napisati funkciju koja tocke zapisuje u niz struktura. Napisati i
strukturu.Iz maina ispisati koordinate u nizu struktura.
Code:

#include<stdio.h>
#include<stdlib.h>
#define N 5
#define COUNTOF(x) sizeof(x)/sizeof(x[0])
struct koord
{
    int x,y,z;
};
void ispis (struct koord k)
{
    printf("x: %d ",k.x);
    printf("y: %d ",k.y);
    printf("z: %d\n",k.z);
}
struct koord* funkcija(FILE* fp,int* i)
{
    struct koord* k,*p;
    k=(struct koord*)malloc(N*sizeof(struct koord));
    while(feof(fp)==0)
    {
        fscanf(fp,"%d %d %d\n",&k[*i].x,&k[*i].y,&k[*i].z);
        *i++;
        if(COUNTOF(k)==N-1)
            realloc(k,(2*N)*sizeof(struct koord));
    }
    p=k;
    return p;
}

int main(void) 
{
    struct koord* novi;
    int i,brojac=0;
    FILE* fp=fopen("koordinate.txt","r");    
    if(fp==NULL)
    {
        perror("");
        fclose(fp);
        
    }
    novi=funkcija(fp,&brojac);
    fclose(fp);
    for(i=0;i<brojac;i++)
        ispis(novi[i]);
    return 0;
}



[Ovu poruku je menjao X Files dana 04.02.2012. u 12:04 GMT+1]
[ Mihajlo Cvetanović @ 05.02.2012. 20:11 ] @
Pre svega ostalog, da li koristiš programski jezik C ili C++? U datom listingu sve je C, međutim neke stvari se elegantnije rade u C++ (uključujući i automatsko proširenje niza pomoću klase std::vector).
[ Mihajlo Cvetanović @ 05.02.2012. 20:16 ] @
A drugo, operator sizeof ne daje očekivani razultat kad se primeni nad pointerom. sizeof će uvek vratiti veličinu pointera (4 bajta, ili 8 bajtova u 64-bitnoj aplikaciji), bez obzira na šta pointer ukazuje. U ovom slučaju makro COUNTOF ti nije od koristi, nego moraš da držiš maksimalnu veličinu niza u posebnoj promenljivoj.
[ Reljam @ 05.02.2012. 23:55 ] @
Cini mi se da N nikad ne povecavas, tako da ce realokacija da se desi samo jedanput. Znaci program bi trebao da pukne ako imas vise od desetak elemenata.