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;
}