Proszę rzucić okiem na funkcję wczytajStos(). Pozostałe funkcje działają tak, jak powinny. Ta funkcja ma wczytywać z pliku dane struktur i wrzucać je na stos.
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<math.h>
#include<conio.h>
#define MAX_NICK 81
struct zawodnik
{
int ID,ELO;
char nick[MAX_NICK];
};
struct stos
{
struct zawodnik wartosc;
struct stos *pNext;
};
void naStos(struct stos **pGlowa, struct zawodnik gracz, int *wolnyID)
{
struct stos *kontener;
kontener=(struct stos*)malloc(sizeof(struct stos));
if(kontener==NULL)
{
printf("blad pamieci");
*pGlowa=NULL;
}
else
{
kontener->wartosc=gracz;
kontener->pNext=*pGlowa;
*pGlowa=kontener;
*wolnyID=*wolnyID+1;
kontener->wartosc.ID=*wolnyID;
}
}
int zeStosu(struct stos **pGlowa, struct zawodnik *pWartosc)
{
struct stos *tmp;
if (*pGlowa==NULL)
{
printf("Blad. Stos jest pusty.\n");
return 0;
}
else
{
pWartosc->ELO=(*pGlowa)->wartosc.ELO;
pWartosc->ID=(*pGlowa)->wartosc.ID;
tmp=*pGlowa;
*pGlowa=(*pGlowa)->pNext;
free(tmp);
return 1;
}
}
void oczyscStos(struct stos **pGlowa)
{
struct stos *tmp;
if (*pGlowa==NULL)
{
printf("\nStos zostal oczyszczony\n");
return;
}
else
do
{
tmp=*pGlowa;
(*pGlowa)=(*pGlowa)->pNext;
free(tmp);
}
while(*pGlowa!=NULL);
printf("\nStos zostal oczyszczony\n");
return;
}
void drukujStos(struct stos **pGlowa)
{
struct stos *tmp;
(tmp=*pGlowa);
if(tmp==NULL)
{
printf("\nStos jest pusty.\n");
return;
}
else
{
printf("\nZawartosc stosu:\n");
for(tmp;tmp!=NULL;tmp=tmp->pNext)
{
printf("Nick:%sID:%d ELO:%d\n\n",tmp->wartosc.nick,tmp->wartosc.ID,tmp->wartosc.ELO);
}
}
}
void zapiszStos(struct stos **pGlowa)
{
FILE *plik;
struct stos *tmp;
plik = fopen("baza.csv", "w");
(tmp=*pGlowa);
if(tmp==NULL)
{
printf("\nStos jest pusty.\n");
return;
}
else if(plik==NULL)
{
printf("\nWystapil blad zapisu do pliku.\n");
return;
}
else
{
for(tmp;tmp!=NULL;tmp=tmp->pNext)
{
fprintf(plik,"%d;%d;%s",tmp->wartosc.ID,tmp->wartosc.ELO,tmp->wartosc.nick);
}
printf("\nDane zostaly pomyslnie zapisane do pliku baza.csv\n");
fclose(plik);
}
}
void wczytajStos(struct stos **pGlowa, struct zawodnik gracz)
{
struct stos *kontener;
FILE *plik;
int i;
struct stos *tmp;
(tmp=*pGlowa);
kontener=(struct stos*)malloc(sizeof(struct stos));
plik=fopen("baza.csv","r");
if(plik==NULL)
{
printf("Błąd otwarcia pliku baza.csv\nPrawdopodobnie plik nie istnieje lub zostal zapisany pod inna nazwa.");
return;
}
else if(kontener==NULL)
{
printf("blad pamieci");
*pGlowa=NULL;
}
else
{
for(i=1;i<10;i++)
{
fscanf(plik,"%d;%d;%s",&tmp->wartosc.ID,&tmp->wartosc.ELO,&tmp->wartosc.nick);
printf("\n%d %d %s\n",tmp->wartosc.ID,tmp->wartosc.ELO,tmp->wartosc.nick);
kontener->wartosc=gracz;
kontener->pNext=*pGlowa;
*pGlowa=kontener;
printf("\nUdalo sie wczytac\n");
fclose(plik);
}
}
}
int wyswietlMenu()
{
char z, bufor[MAX_NICK], *wynik;
int *wolnyID=0;
struct stos *pGlowa=NULL;
struct zawodnik gracz;
while(1){
printf("1. Dodaj gracza na stos\n2. Oczysc stos\n3. Drukuj stos\n4. Zapisz stos do pliku\n0. Koniec\n");
while ((z = getche())<' ');
switch(z){
case '3':
drukujStos(&pGlowa); break;
case '4':
zapiszStos(&pGlowa); break;
case '2':
oczyscStos(&pGlowa); break;
case '1':
printf("\nPodaj nick: ");
wynik = fgets (bufor, MAX_NICK, stdin);
if(wynik!=0){
strcpy(gracz.nick, bufor);
gracz.ELO=1000;
naStos(&pGlowa,gracz, &wolnyID);
printf("Konto gracza zostalo pomyslnie utworzone. ID:%d, ELO:%d\n",wolnyID,gracz.ELO);
}
else printf("Blad odczytu\n");
break;
case '5':
wczytajStos(&pGlowa,gracz); break;
case '0': printf("\n"); return 0;
};
}
//zeStosu(&pGlowa,&gracz);
}
int main()
{
wyswietlMenu();
system("PAUSE");
}