no tak ako má tam viac chýb v podstate je to úplne strašné
takto by to malo vyzerať správne:
Kód:
int pole()
{
FILE *fr;
char s1[30];
char s2[30];
char s3[30];
char s4[30];
int c1,c2,x=0,pz=0;
float f1=0;
float *p_x;
fr=fopen(ZAJAZDY,"r");
if(fr == NULL){printf("Neotvoreny subor\n"); //na koniec riadku sluzi \n nie \0
return 1;}
while (feof(fr) == 0){
fgets(s1 , 30 , fr);
fgets(s2 , 30 , fr);
fgets(s3 , 30 , fr);
fscanf(fr,"%d\n", &c1);
fscanf(fr,"%f\n", &f1); //kedze chces pracovat s floatom, musis aj nacitat ako float, inak prepisujes nejaku inu pamet, preto pouzijes %f nie %lf
//totiz %lf-om nacitavas do typu double, ktory ma 4B float ma len 2B
fgets(s4 , 30 , fr);
fscanf(fr,"%d\n", &c2); //nechapem preco pouziovas fscanf_s ked to je len projekt do skoly staci ti fscanf
pz++;
}
p_x = ((float*) malloc(pz * sizeof(float)));
rewind(fr);
while (feof(fr) == 0){
fgets(s1 , 30 , fr);
fgets(s2 , 30 , fr);
fgets(s3 , 30 , fr);
fscanf(fr,"%d\n", &c1);
fscanf(fr,"%f\n", &f1); //opet - nie %lf ale %f
fgets(s4 , 30 , fr);
fscanf(fr,"%d\n", &c2);
*(p_x+x)=f1; //mas na vyber bud takto
x++;
/*alebo to mozes urobit aj takto:
*p_x=f1;
p_x+=sizeof(float);
alebo este jedna moznost
p_x[x]=f1;
x++;
*/
}
return 0;
}
opravy sú popísané v komentároch v kóde, kukni
btw mám taky pocit, že potrebuješ pracovať s tým poľom aj mimo funkcie, potom si skús teda funkciu nejako upraviť aby ti returnovala to pole a nejakú veľkosť toho poľa, to už nechávam na tebe