Witam, posiadam pewien problem z programem, prawdopodobnie zapisuje strukturę prawidłowo, lecz jest jakiś problem z odczytem.

/* Napisz program "Akademik". Program ma przechowywać informacje o studentach zameldowanych w poszczególnych pokojach trzyosobowych.
Na potrzeby testowania należy przyjąć, że akademik posiada cztery pokoje trzyosobowe.

Należy użyć struktury typu tablica czteroprocentowa tablic trójelementowych, o elementach typu struktura "Osoba" 
o polach: imie, nazwisko, pesel,wydzial, czy_zalega.

Program ma za zadanie za pomocą menu pozwalać na wybranie jednej z operacji:
- wczytanie danych z klawiatury,
- wczytanie danych z pliku,
- wypisanie wszystkich danych, wg numerów pokoi,
- wypisać dane osób zalegających, z podaniem numerów pokoi
- wypisać dane osób z podanego wydziału 
- wypisać dane osób o podanym imieniu,
- wypisać dane osoby w wieku poniżej 21 lat  wykorzystać pesel
- po zakończeniu program ma za zadanie zapisać plik z danymi  */
/* ----------------------------------------------------------------------- */
	#include <conio.h>
	#include <stdio.h>
/* ----------------------------------------------------------------------- */

	#define N 1 /* Pokoje */
	#define M 1 /* Osoby */

/* ----------------------------------------------------------------------- */

	struct Osoba{
		char imie[20], nazwisko[20],czy_zalega[4],wydzial[15], pesel[12];
	};

/* ----------------------------------------------------------------------- */

	void wczytaj_dane (struct Osoba [*][*]);
	void dane_do_wyswietlenia();
	void wyswietl_dane ();
	void czy_zalega_nr();
	void szukanie_wydzial();
	void szukanie_imie();
	void ponizej_21();
	void menu();
	void tabelka();
	int zapisanie_pliku();
	void lokalizacja_Pliku(); 
	int wczytanie_z_pliku();
	
/* ------------------------------------------------------------------------ */
	char sciezka[N],spr;
/* ------------------------------------------------------------------------ */

int main (void) 
{ int *wybor;
	
	struct Osoba tablica [N][M];

	 do{
	 	system("cls");
	 	menu();
	 	printf("\nPodaj odpowiednia watosc ");	
	 	scanf("%d", wybor);
			switch(*wybor)
			{
				case 1:
				{
					wyswietl_dane(tablica);
					while(!kbhit());
					continue;	
				}
				case 2:
				{
					wczytaj_dane(tablica);
					continue;	
				}
				case 3:
				{
					lokalizacja_Pliku(); 
					wczytanie_z_pliku(tablica);
					while(!kbhit());
					continue;	
				}
				case 4:
				{
					czy_zalega_nr(tablica);
					while(!kbhit());
					continue;	
				}
				case 5:
				{
					szukanie_imie(tablica);
					while(!kbhit());
					continue;
					
				}
				case 6:
				{
					szukanie_wydzial(tablica);
					while(!kbhit());
					continue;
				}
				case 7:
				{
					wyswietl_dane(tablica);
					while(!kbhit());
					continue;	
				}	
				case 8:
				{
					ponizej_21(tablica);
					while(!kbhit());
					continue;
				}	
			};
			
		}  while(*wybor !=0);
	lokalizacja_Pliku(); 
	zapisanie_pliku(); 
	return 0;
}
/* ---------------------------------------------------------------------- */
void tabelka() 
{

}
void lokalizacja_Pliku() 
{
	printf("\nPodaj sciezke do pliku: np:(c://dane.txt) ");
	scanf("%s", sciezka);
}
int zapisanie_pliku(struct Osoba tablica [N][M]) 
{	int i;
  	FILE *plik;

	if ((plik = fopen(sciezka,"wb"))==NULL)
	{
		printf("Chcesz sprobowac jeszcze raz t/n:");
		scanf ("%s", &spr);
		if(spr=='t') {
			main();
		} else {
			return 100;
		}
	}
	for (i=0; i<N; i++)
		fwrite(tablica,sizeof(int),sizeof(tablica),plik);
	fclose(plik);
} 
int wczytanie_z_pliku(struct Osoba tablica [N][M])
{	int i;
  	FILE *plik;

	if ((plik = fopen(sciezka,"rb"))==NULL)
	{
		printf("Chcesz sprobowac jeszcze raz t/n:");
		scanf ("%s", &spr);
		if(spr=='t') {
			main();
		} else {
			return 100;
		}
	}
	for (i=0; i<N; i++)
		fread(tablica,sizeof(int),sizeof(tablica),plik);
	fclose(plik);
}
void menu()
{
	printf("Program AKADEMIK - twoja baza 1.0 [BETA]");
	printf("\n\n1 - wyswietlanie Danych");
	printf("\n2 - wczytanie danych z Klaw.");
	printf("\n3 - wczytanie danych z Pliku");
	printf("\n4 - wyswietlenie Zalegajacych");
	printf("\n5 - wyswietlenie wg Imienia ");
	printf("\n6 - wyswietlenie wg Wydzialu");
	printf("\n7 - wyswietlenie wg Nr.pok.");
	printf("\n8 - wyswietlenie 21+");
	printf("\n0 - Koniec pracy\n");
}

void wczytaj_dane (struct Osoba tablica[N][M])
{	int i,x,w=1,p=1;
	printf("\n\nPodaj dane osob zamieszkujacych pokoje:");
	for (i=0; i<N; i++,w++)
	{
		printf("\n\n\nPokoj nr %d\n\n",w);
		for (x=0,p=1; x<M; x++,p++)
		{
			printf("\nPodaj dane     pokoj [%d]     osoba [%d]  ", w,p);
			printf("\n---------------------------------------------");
			printf("\nimie:"); scanf("%s", &tablica[i][x].imie );
			printf("czy_zalega:"); scanf("%s",&tablica[i][x].czy_zalega);
			printf("wydzial:"); scanf("%s", &tablica[i][x].wydzial);
			printf("pesel: "); scanf("%s", &tablica[i][x].pesel);
		}
	}
}
void dane_do_wyswietlenia(int i, int x,int w,int p, struct Osoba tablica[N][M])
{	
	printf("\nPodano dane     pokoj [%d]     osoba [%d]  ", w,p);
    printf("\n---------------------------------------------");
	printf("\nimie: %s", tablica[i][x].imie );
	printf("\nczy_zalega_nr: %s", tablica[i][x].czy_zalega);
	printf("\nwydzial: %s", tablica[i][x].wydzial);
	printf("\npesel: %s", tablica[i][x].pesel);
	printf("\n");
}
void wyswietl_dane (struct Osoba tablica[N][M])
{	int i,x,w=1,p=1;
	printf("\n\nPodano :");
	for (i=0,w=1; i<N; i++,w++)
	{
		printf("\n\nPokoj nr %d\n",w);
		for (x=0; x<M; x++,p++)
		{
			dane_do_wyswietlenia(i,x,w,p,tablica);
		}
	}
	while(!kbhit());
}
void czy_zalega_nr(struct Osoba tablica [N][M])
{	int i,x,w=1,p=1;
	for (i=0,w=1; i<N; i++,w++)
		for (x=0; x<M; x++,p++)
			if(strcmp(tablica[i][x].czy_zalega,"tak")==0)
			{
				dane_do_wyswietlenia(i,x,w,p,tablica);
			} else {
				printf("\nBrak osob zalegajacych");
			}
}

void szukanie_wydzial(struct Osoba tablica [N] [M])
{	int i,x,w=1,p=1;
	char wydzial[10];
	printf("\nPodaj wydzial do wyszukania: "); scanf("%s", wydzial);
	for (i=0,w=1; i<N; i++,w++)
		for (x=0; x<M; x++,p++)
			if( stricmp(wydzial,tablica[i][x].wydzial) == 0)
				dane_do_wyswietlenia(i,x,w,p,tablica);
			else {
				printf("\nNie znaleziono osoby z tego wydzialu");
			}
}
void szukanie_imie(struct Osoba tablica [N] [M])
{	int i,x,w=1,p=1;
	char imie[15];
	printf("\nPodaj imie do wyszukania: "); scanf("%s", imie);
	for (i=0,w=1; i<N; i++,w++)
		for (x=0; x<M; x++,p++)
			if( stricmp(imie,tablica[i][x].imie) == 0)
				dane_do_wyswietlenia(i,x,w,p,tablica);
			else {
				printf("\nNie znaleziono osoby o tym imieniu");
			}
}

void ponizej_21(struct Osoba tablica [N] [M])
{	int i,x,w=1,p=1;
	char data[6];
	for (i=0,w=1; i<N; i++,w++)
		for (x=0; x<M; x++,p++)
		{
			strncpy(data, &tablica[i][x].pesel, 6);
			data[6] = '\0';
			int pesel_liczba = atoi (data);
			if(pesel_liczba > 930101)
				dane_do_wyswietlenia(i,x,w,p,tablica);
			else {
				printf("\nNie znaleziono osoby o takim peselu");
			}
		}
}