Język C obsługa plików mały problem

szatek
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 3 lut 2010, o 16:25
Płeć: Mężczyzna

Język C obsługa plików mały problem

Post autor: szatek »

Poniżej wklejam swój kod mojego małego programu. Chciałem się na nim nauczyć obsługi plików.
Taka mała baza danych tylko, że same liczby są co by za dużo się nie napisać a zrozumieć ideę.
Chodzi mi głównie o funkcję Wczytaj i Zapisz (niezbyt sobie radzę z obsługą plików w C). Niezbyt poprawnie wczytuje mi te liczby do mojej tablicy liczby.
Może mi ktoś powiedzieć gdzie jest błąd.
Wydaje mi się, że jakoś źle się ten wskaźnik po tym pliku przesuwa ale nie mam pojęcia co z tym zrobić. Z góry dzięki za pomoc.
#include <stdio.h>
#include <stdlib.h>

// program do zabawy z plikami

int WczytajLiczbe()
{
int a;
printf("
Podaj liczbe jaka chcesz dodac:
");
scanf("%d",&a);
return a;
}

void Zwieksz(int **liczby,int *il,int *zajete)
{
int *stare;
int i;
if (*zajete!=0)
{
stare=malloc(sizeof(int)*(*zajete));
for (i=0; i<*zajete; i++)
stare=(*liczby);
}
*il=*il+10;
*liczby=malloc(sizeof(int)*(*il));
for (i=0; i<*il; i++)
{
(*liczby)=0;
}
if (*zajete!=0)
{
for (i=0; i<*zajete; i++)
(*liczby)=stare;
free(stare);
}
}


int Dodaj(int **liczby,int liczba,int *zajete, int *il)
{
if (*zajete==*il) Zwieksz(liczby,il,zajete);
(*liczby)[*zajete]=liczba;
(*zajete)++;
}


void Wyswietl(int *liczby, int zajete)
{
int i;
printf("
Liczby:
");
for (i=0; i<zajete; i++)
printf("%d: %d
",i+1,liczby);
//printf("Zajete: %d
",zajete);
}


void Wczytaj(int **liczby, int *zajete, int *il, FILE *plik)
{
int i=0;
int liczba;
while (!feof(plik))
{
fread(&liczba,sizeof(int),1,plik);
printf("
Wczytana liczba: %d
",liczba);
i++;
}
*zajete=i;
*il=i;
*liczby=malloc(sizeof(int)*(*il));
i=0;
while (!feof(plik))
{
fread(&(*liczby),sizeof(int),1,plik);
i++;
}
}


void Zapisz(int *liczby,int zajete, FILE *plik)
{
int i;
plik=fopen("liczby.dat","wb");
for (i=0; i<zajete; i++)
fwrite(&liczby,sizeof(int),1,plik);
fclose(plik);
}


int main()
{
int koniec=1;
int odp;
int *liczby;
int il=0;
int zajete=0;
int liczba;
FILE *plik;
plik=fopen("liczby.dat","rb");
if (plik!=NULL) Wczytaj(&liczby,&zajete,&il,plik);
fclose(plik);

do
{
do
{
printf("
MENU
");
printf("1 - Dodaj liczbe
");
printf("2 - Wyswietl liczby
");
printf("3 - Wyjscie
");
scanf("%d",&odp);
} while (odp<1 || odp>3);

switch(odp)
{
case 1:
liczba=WczytajLiczbe();
Dodaj(&liczby,liczba,&zajete,&il);
Zapisz(liczby,zajete,plik);
break;
case 3:
koniec=0;
break;
case 2:
Wyswietl(liczby,zajete);
break;
}
} while(koniec);

return 0;
}
ODPOWIEDZ