Polecenie:
program otwiera plik tekstowy, którego każda linijka zawiera pewną, z góry nieokreśloną liczbę liczb
zmiennoprzecinkowych typu float (pełne rozwiązanie nie powinno zakładać żadnego ograniczenia na długość linijki),
odczytuje kolejne linijki i ich zawartość zapisuje do pliku binarnego jako rekordy o zmiennej długości:
każdy rekord składa się z liczby typu integer, która określa liczbę danych (liczb float) w linijce,
za którą następują same dane (liczby). Plik nie powinien zawierać żadnych dodatkowych zapisów (separatorów, znaczników itp).
Mam problem, ponieważ do pliku zapisuje się jedynie liczba liczb w linii i nie wiem jak to naprawić.
#include <stdio.h>
#include <stdlib.h>
#define IN 1
#define OUT 0
struct rec
{
size_t num;
char *arr;
};
int number_of_numbers(char * buffer)
{
int counter, state;
int i;
i=counter = state = OUT;
while((buffer[i]!='\n')&&(buffer[i]!=EOF))
{
if(buffer[i]==' '||buffer[i]=='\t') state = OUT;
else if(state==OUT)
{
state = IN;
counter++;
}
i++;
}
return counter;
}
int main()
{
FILE *f,*f_2;
long lSize;
char *buffer;
struct rec r;
f = fopen("plik.txt", "r");
f_2=fopen("nowyplik.txt", "wb");
if(!f) return 1;
fseek(f, 0, SEEK_END);
lSize = ftell(f);
rewind (f);
r.arr = (char*)malloc(sizeof(char)*lSize);
while(fgets(r.arr,lSize,f)!=NULL)
{
r.num = number_of_numbers(r.arr);
fwrite(&r, sizeof(struct rec), sizeof(r.arr), f_2);
}
fclose(f);
free(r.arr);
fclose(f_2);
return 0;
}