Program ne bi trebao ni da pocne da radi. Neznam sa cim kompajliras (ja koristim GCC) ali imas par fatalnih gresaka :
prvo, prototipi funkcija treba da budu na pocetku source fajla, izvan funkcije main.
Drugo, prototip mora u sebi sadrzati tipove argumenata koji ce se koristiti, a kod tebe ih nema :
Code:
void pisi();
Posle toga si pozivao funkciju
Code:
void pisi(PODACI *tekuci)
{
...
}
u kojoj postoji argument tipa "PODACI", sto ne sme da bude tako. Prototip sluzi da kaze kompajleru koji tip podatka da ocekuje kao argument, a ti mu nisi dao nikakvu vrednos, a onda funkciju definisao sa nekim argumentom.
Prototip treba, dakle, da ti izgleda ovako :
Code:
void pisi(PODACI*);
//ILI OVAKO :
void pisi(PODACI *tekuci);
//Kompajleru generalno nije bitno da li si napisao ime argumenta (promenljive) u prototipu,
//Ali mu je bitan tip
Takodje, nesto da znas za u buduce :
ako hoces da napises prototip funkcije koja nema argumente, nemoj koristiti prazne zagrade '()' vec tip void
(void)
Jos jedna bitna stvar jeste da gledas da retko koristis
goto
Code:
while(i<409)
{
novi=(PODACI *)malloc(sizeof(PODACI));
assert(novi);
fread(novi,sizeof(PODACI),1,fptr);
if(feof(fptr)) goto line;
novi->sledeci=pocetak;
pocetak=novi;
fwrite(pocetak->radnik,sizeof(char)*6,1,stdout);
fwrite(pocetak->neto,sizeof(char)*14,1,stdout);
putchar('\n');
i++;
}
line: fclose(fptr);
getchar();
pisi(pocetak);
pomocni=pocetak;
return(0);
}
Neznam tacno sta ti je bila namera, ali posle goto skoka, program se ne vraca u 'while' petlju, nego nastavlja dalje.
Ako ti je to i bio cilj, onda si to trebao da stavis kao uslov izvrsavanja petlje, a ako nije, onda si sebi napravio problem
jer goto ne vraca na petlju. Moj predlog je da sve ispod
line: stavis u posebnu funkciju, i nju pozoves umesto da pravis bezuslovni skok.