Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc - program ne radi,ne znam kako dalje?

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc - program ne radi,ne znam kako dalje?

[ Pregleda: 1534 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MDBistabil
Mensur Durakovic
Student
Split

Član broj: 297738
Poruke: 7
*.st.cable.xnet.hr.



+1 Profil

icon Pomoc - program ne radi,ne znam kako dalje?04.02.2012. u 10:09 - pre 147 meseci
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]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Pomoc - program ne radi,ne znam kako dalje?05.02.2012. u 20:11 - pre 147 meseci
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).
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Pomoc - program ne radi,ne znam kako dalje?05.02.2012. u 20:16 - pre 147 meseci
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.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
24.130.8.*



+18 Profil

icon Re: Pomoc - program ne radi,ne znam kako dalje?05.02.2012. u 23:55 - pre 147 meseci
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.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc - program ne radi,ne znam kako dalje?

[ Pregleda: 1534 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.