Witam,
Przyznam, że jest to najbardziej nietypowy problem z jakim miałem do czynienia.
Program - baza danych składa się z dwóch struktur: ID oraz Pracownik.
Menu wyświetla opcję do wyboru: Identyfikatory lub Pracownicy.
W przypadku wyboru wyłącznie pierwszego (‘1’) możemy swobodnie operować na ID, następnie program elegancko zapisuje na dysku dane za pomocą funkcji “Zapisz_ID”.
Jeśli wybierzemy wybór dwa (‘2’) to wówczas żadne dane nie zostają zapisane, mimo, że wcześniej były wczytane. (
int main()
{
ID *ids;
Pracownik *prac;
ids=(ID*) malloc (15*sizeof(*ids));
prac=(Pracownik*) malloc (20*sizeof(*prac));
int k=0;
int l=0;
int *i;
int *j;
i=k;
j=l;
char wyb;
int wyb2, wyb3, wyb4, wyb5, zwrotka;
/* MENU */
printf("IDENTYFIKATORY ____________ 1\n");
printf("PRACOWNICY ________________ 2\n");
wyb=getch();
if(wyb=='1')
{
wczytaj_ID(ids, i);
do
{
printf("Dodaj-1; Usun-2");
scanf("%d", wyb2);
switch (wyb2)
{
case 1 : dodaj_nowyID(ids, i); break;
case 2 :
{
pokaz_ID(ids, i);
scanf("%d", wyb3);
zwrotka=szukaj_dzialu(ids, wyb3, i);
usun_ID(ids, zwrotka, i);
break;
}
}
} while (wyb2!=3);
}
if (wyb=='2')
{
printf("wyb2");
}
zapisz_ID(ids, i);
free(ids);
free(prac);
}
Oto i funkcja Zapisz_ID:
void zapisz_ID (ID* wsk, int *i)
{
FILE *plik;
plik=fopen("identyfikatory.dat", "w");
int licznik;
for(licznik=0; licznik*i; licznik++)
{
fprintf(plik, "%s", wsk[licznik].dzial);
fprintf(plik, " %d", wsk[licznik].nr);
if (licznik==*i-1)
{
fprintf(plik, " %d", wsk[licznik].kol);
}
else fprintf(plik, " %d\n", wsk[licznik].kol);
}
fclose(plik);
}
I struktury:
typedef struct
{
char dzial[30];
int nr;
int kol;
}ID;
typedef struct
{
int ID;
char imie[20];
char nazwisko[40];
char dzien[2];
char miesiac[2];
char rok[4];
int placa;
}Pracownik;