[ milos_r @ 07.01.2009. 12:53 ] @
Pozdrav svima,
pokusavam da napravim program koji ce da ucita podatke iz tekstualnog fajla i strpa ih u strukturu. Primer recimo u tekstualnom fajlu pise;
pera peric 10
mika mikic 9
...
itd. da pera peric postane recimo struct STUDENT student[0], a mika [1] i tako redom.
Evo i koda koji sam do sada sklepao, ali znam tacno da mi neradi deo sa ucitavanjem u strukturu. Napisacu samo deo koda koji je relevantan za problem da nepravim veliki post.
Code:

int main(){
struct STUDENT *student;
int i=0;
f = fopen(putanja_do_fajla,"r"); //unosi se kao argument komande linije

while(ucitaj(f,&student[i++]))  // jedna varijanta da pozovem funkciju za ucitavanje koja neradi

for(i=0;feof(f);i++)
      ucitaj(f,&student[i]);       // druga varijanta da pozovem funkciju koja takodje neradi

//evo i funkcije ucitaj
void ucitaj(FILE* f,struct STUDENT *o) {
    fscanf(f,"%s",o->ime); 
    fscanf(f,"%s",o->prezime);
    fscanf(f,"%d",&(o->ocena)); 
    }

Hvala unapred na idejama
Milos
[ milos_r @ 07.01.2009. 16:30 ] @
Evo mozda sam u prvom postu previse skratio kod pa da napisem ceo mozda tada bude jasnije sta me muci:
Code:

#include<stdio.h>
#include<errno.h>
#include<stdlib.h>

struct STUDENT{
    char ime[31];
    char prezime[41];
    int ocena;
    };

int ucitaj_osobu(FILE* f,struct STUDENT *o) {
    fscanf(f,"%s",o->ime);
    if(feof(f)) return 0;
    fscanf(f,"%s",o->prezime);
    fscanf(f,"%d",&(o->ocena));
    return 1;
    }

int main(int argc,char** argv) {
    int i=0,k;
    struct STUDENT stud[100];
    FILE* f;

    if ( (f = fopen(argv[1], "r")) == NULL){
        printf("Greska : datoteka %s ne moze biti otvorena\n", argv[1]);}

    while(ucitaj_osobu(f,&stud[i]))
        i++;

    for (k=0; k<i; k++) {
        printf ("%s %s %s\n",stud[k].ime,stud[k].prezime,stud[k].ocena);
        printf ("\n");}

    fclose(f);
    return 0;
    }


Ako neko zna resenje super bi mi pomogao
Hvala unapred
Milos
[ StefanJer91 @ 08.01.2009. 11:37 ] @
Sta tacno ne ispise dobro? Nisam u mogucnosti da trenutno kompajliram kod, ali cini mi se da ti je ovde greska:
Code:

printf ("%s %s %s\n",stud[k].ime,stud[k].prezime,stud[k].ocena);

Umesto toga treba:
Code:

printf ("%s %s %d\n",stud[k].ime,stud[k].prezime,stud[k].ocena);
[ Eurora3D Team @ 09.01.2009. 21:22 ] @
StefanJer91 je dobro primetio , treba %d umesto %s zato sto je treci element strukture int.
[ milos_r @ 10.01.2009. 00:12 ] @
Citat:
StefanJer91: Sta tacno ne ispise dobro? Nisam u mogucnosti da trenutno kompajliram kod, ali cini mi se da ti je ovde greska:
Code:

printf ("%s %s %s\n",stud[k].ime,stud[k].prezime,stud[k].ocena);

Umesto toga treba:
Code:

printf ("%s %s %d\n",stud[k].ime,stud[k].prezime,stud[k].ocena);


E hvala vam moci, da u pravu ste to je bila greska video sam je i sam inace posle dugo trazenja.
Sve u svemu reseno