W pliku tekstowym mam dane liczby typu double w dwóch kolumnach z niewiadomą liczbą wierszy. Wszystko działa poprawnie, gdy używam do tego celu funkcji fgets, natomiast nie rozumiem dlaczego program wysypuje się w poniższym przypadku. Od czasu do czasu zadziała, kiedy przed funkcją rewind wpiszę printfa. Mógłby mi ktoś wyjaśnić dlaczego tak się dzieje?
Kod:
#include<stdio.h>
#include<stdlib.h>
int cmp_r(const void *a, const void *b)
{
return (*(double*)a - *(double*)b);
}
int cmp_m(const void *a, const void *b)
{
return (*(double*)b - *(double*)a);
}
int main()
{
int j,i=1,wiersze=0;
char znak;
FILE *fp;
double *wsk1, *wsk2;
fp = fopen("dane.txt", "r");
if(!fp)
{
printf("Otwarcie pliku nie powiodlo sie \n");
exit(-1);
}
while ( (znak = getc(fp)) != EOF) // Prawdopodobnie z ta petla jest jakis problem
{
if (znak == '\n')
++wiersze;
}
rewind(fp);
wsk1 = (double *) malloc (wiersze * sizeof(double));
wsk2 = (double *) malloc (wiersze * sizeof(double));
fscanf(fp,"%lf", &wsk1[0]);
fscanf(fp,"%lf", &wsk2[0]);
while(feof(fp) == 0)
{
fscanf(fp,"%lf", &wsk1[i]);
fscanf(fp,"%lf", &wsk2[i]);
i++;
}
printf("Tablica1 Tablica2\n");
for(j=0;j<wiersze;j++)
{
printf("%6.2lf %10.2lf \n", wsk1[j], wsk2[j]);
}
qsort(wsk1,wiersze,sizeof(double),cmp_r);
qsort(wsk2,wiersze,sizeof(double),cmp_m);
printf("\nTablice posortowane:\n\n");
printf("Tablica1 Tablica2\n");
for(j=0;j<wiersze;j++)
{
printf("%6.2lf %10.2lf \n", wsk1[j], wsk2[j]);
}
free(wsk1);
free(wsk2);
fclose(fp);
return 0;
}