Witam mam dwa problemy z moim kodem, chciałem napisać program składający się z tablicy 4 elementowej, każdym elementem jest lista jedno kierunkowa.
Funkcja utwórz wczytuje z pliku dane i przekazuje je do funkcji dodaj która powinna dodać na początek listy dla danej komórki. W praktyce zapełnia komórki tylko najnowszymi danymi na przykład wczytuje dla first[0] i first[1] to we wszystkich komórkach jest to co w first[1]. Kolejka raczej działa problem jest chyba z wywoływaniem funkcji.

struct film {
	int sala;
	char tytul;
	char godz[20];
	float cena;
	char miejsca[10];
	struct film *next;
};

void dodaj(struct film **first,struct film *temp)
{
	FILE *plik; 
	char s[255];
	struct film *p; 

	//p=(*first);
	p=(struct film *)malloc(sizeof(film));
	*p=*temp;
	p->next=*first;
	*first= p;	


}
void utworz(struct film **first)
{
	FILE *plik; 
	struct film p; 
	char wiersz[255];
	int i=0;

	
	
	if ((plik=fopen("lista.txt","r"))==NULL) // próba otwarcia pliku
		printf ("Blad danych");
	else {
		while( fgets(wiersz, sizeof(wiersz), plik)!=NULL )
		{
			printf("Sala %d, ",p.sala =atof(strtok(wiersz, ", ")));   
			printf("cena %f, ", p.cena =atoi(strtok(NULL, ", ")));
			printf("godzina %s, ", p.godz =strtok(NULL, ", "));
			printf("tytul %s, \n", p.tytul =strtok(NULL, ", "));
			i++;
			dodaj(&(first[p.sala]),&p);
		}

		
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	int i=0;
	int liczba_filmow=10;
	int liczna_sal=4;
	struct film *first[4];
	char menu='y';
	int wybor;

           utworz(first);

	return 0;
}