Mam za zadanie napisac kod ktory wczytuje z pliku w trybie tekstowym dane do sktruktury nastepnie blyskawicznie zapisuje te dane do pliku w trybie binarnym poczym wczytuje te z pliku w trybie binarnym do listy dwukierukowej a nastepnie liste zapisuje w 2 plikach tekstowych w 1 zgodnie kolejnoscia w 2 odwrotnie tj 1 2 3 4// 4 3 2 1
wszystko dziala tylko jest jeden problem w momencie wczytywania do listy z pliku binarnego wczytywana zostaje zawsze JEDNA porcja za duzo danych do struktury czyli tzw smieci z czego to moze wynikac ? oto kod
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct osoba{
char imie[20];
char nazwisko[30];
int wiek;
osoba *nast;
osoba *poprz;
};
void odczyt_t(FILE *t_odczyt, FILE *b_zapisb)
{
osoba *os_odczyt_t;
os_odczyt_t=(osoba *)malloc(sizeof(osoba));
while(!(feof(t_odczyt)))
{
fscanf(t_odczyt,"%s%s%d", os_odczyt_t->imie, os_odczyt_t->nazwisko, &os_odczyt_t->wiek);
printf("%s %s %d\n", os_odczyt_t->imie, os_odczyt_t->nazwisko, os_odczyt_t->wiek);
fwrite(os_odczyt_t->imie, sizeof(os_odczyt_t->imie), 1, b_zapisb);
fwrite(os_odczyt_t->nazwisko, sizeof(os_odczyt_t->nazwisko), 1, b_zapisb);
fwrite(&os_odczyt_t->wiek, sizeof(os_odczyt_t->wiek), 1, b_zapisb);
}
free(os_odczyt_t);
printf("\n\n\n\n");
}
osoba *last;
osoba * odczyt_b(FILE *b_odczytb)
{
osoba *glowa,*ogon,*stary;
glowa=NULL;
while(!(feof(b_odczytb)))
{
if(glowa==NULL)
{
glowa=ogon=(osoba *)malloc(sizeof(osoba));
glowa->poprz=NULL;
}
else
{
ogon->nast=(osoba *)malloc(sizeof(osoba));
ogon=ogon->nast;
ogon->poprz=stary;
}
ogon->nast=NULL;
stary=ogon;
last=stary;
fread(ogon->imie, sizeof(ogon->imie), 1, b_odczytb);
fread(ogon->nazwisko, sizeof(ogon->nazwisko), 1, b_odczytb);
fread(&ogon->wiek, sizeof(ogon->wiek), 1, b_odczytb);
printf("%s %s %d\n", ogon->imie, ogon->nazwisko, ogon->wiek);
}
return glowa;
}
void zg_zapis(osoba *glowa)
{
FILE *zapis;
zapis=fopen("zgodnie.txt","w");
while(glowa!=NULL)
{
fprintf(zapis, "%s %s %d\n", glowa->imie, glowa->nazwisko, glowa->wiek);
glowa=glowa->nast;
zg_zapis(glowa);
}
fclose(zapis);
return ;
}
void od_zapis(osoba *last)
{
FILE *zapis;
zapis=fopen("odwrotnie.txt","w");
while(last!=NULL)
{
fprintf(zapis, "%s %s %d\n", last->imie, last->nazwisko, last->wiek);
last=last->poprz;
od_zapis(last);
}
fclose(zapis);
return ;
}
int main(void)
{
osoba *glowa;
char odczyt[256];
char zapisb[256];
printf("podaj nazwy plikow do oczytu i zapisu danych\n");
scanf("%s", odczyt);
scanf("%s", zapisb);
FILE *t_odczyt,*b_zapisb;
t_odczyt=fopen(odczyt,"r");
b_zapisb=fopen(zapisb,"wb");
odczyt_t(t_odczyt, b_zapisb);
fclose(t_odczyt);
fclose(b_zapisb);
b_zapisb=fopen(zapisb,"rb");
glowa=odczyt_b(b_zapisb);
zg_zapis(glowa);
od_zapis(last);
while(last)
{
glowa=last;
last=last->poprz;
free(glowa);
}
return 0;
}