Program wczytuje plik .csv, który jest w postaci:
#komentarz
wartosc x1, wartosc y1
wartosc x2, wartosc y2
...
Przy wczytywaniu ma pominąć komentarz (lub komentarze) i zapisać dane do struktury (samo w sobie łatwe). Jednak nie wiemy, ile jest punktów w tym pliku i program powinien zliczyć je sam na samym wstępie (by potem odpowiednio zadeklarować rozmiar tablicy) i na tym program mi się sypie (tzn. nic się nie dzieje - dosłownie). Cały program, który mam do napisania jest większy, jednak kombinuję teraz na jego malutkim, przerobionym fragmencie w postaci:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct Punkt
{
double x;
double y;
};
void pominKomentarze(FILE *plik)
{
int znak;
znak = getc(plik);
while (znak == '#')
{
while (znak != '\n')
{
znak = getc(plik);
}
znak = getc(plik);
}
}
int zliczIloscProbek(FILE *plik)
{
int i = 0;
int znak;
pominKomentarze(plik);
znak = getc(plik);
while (feof(plik) == 0);
{
if (znak == '\n')
i++;
znak = getc(plik);
}
return i;
}
int main()
{
int i;
struct Punkt* tab;
FILE *plik = fopen("sumaprzebiegow.csv" , "r");
tab = (struct Punkt*)malloc(100*sizeof(struct Punkt));
if (plik == NULL)
{
printf ("Nie mozna otworzyc pliku do odczytu\n");
exit(1);
}
pominKomentarze(plik);
for (i = 0; i < 100; i++)
{
fscanf(plik, "%lf,%lf", &tab[i].x, &tab[i].y);
}
for(i = 0; i < 100; i++)
printf("%lf %lf\n", tab[i].x, tab[i].y);
rewind(plik);
printf("Ilosc probek: %d\n", zliczIloscProbek(plik));
fclose(plik);
return 0;
}
Program bez problemu wczytuje wszystko, ale musiałem podać, że próbek jest 100, program mi tego nie chce policzyć (wprost z pliku oczywiście). Mógłbym zliczyć ilość punktów w strukturze oczywiście, jednak nie o to chodzi. W czym rzecz? Jak powinienem zliczyć ilość punktów?