program z 4 funkcjami

0

Wszystkie funkcje działają oprócz wczytaj.
Mogę dodawać nowych pracowników, wyświetlać dodanych, zapisywać do pliku ale odczytać już nie można, program się crashuje.

#include "stdafx.h"

struct pracownik
{
	char nazwisko[50];
	int pensja;
};
int ilosc=0;
pracownik tablica[50];


void wczytaj()
{
	FILE *plik;
	fopen_s(&plik, "pracownicy.txt", "rt");
	while (feof(plik) == 0)
	{
		if (ilosc<50)
		{
			fscanf_s(plik, "%s", &tablica[ilosc].nazwisko);
			fscanf_s(plik, "%d", &tablica[ilosc].pensja);
			ilosc++;
		}
		else break;
	}
}

void nowy()
{
	if (ilosc<50)
	{
		scanf_s("%s", &tablica[ilosc].nazwisko, 50);
		scanf_s("%d", &tablica[ilosc].pensja);
	}
	ilosc++;
}

void wyswietl()
{
	for (int i = 0; i<ilosc; i++)
	{
		printf("%s ", tablica[i].nazwisko);
		printf("%d\n", tablica[i].pensja);
	}
}

void zapisz()
{
	FILE *plik;
	fopen_s(&plik, "pracownicy.txt", "wt");
	for (int i = 0; i<ilosc; i++)
	{
		fprintf(plik, "%s ", tablica[i].nazwisko, 1);
		fprintf(plik, "%d\n", tablica[i].pensja);
	}
}


int _tmain(int argc, _TCHAR* argv[])
{

	ilosc = 0;
	bool dalej = true;
	int liczba;
	printf("0-zamkniecie programu\n1-wczytaj z pliku\n2-nowy\n3-zapisz do pliku\n4-wyswietl\nOpcja: ");
	scanf_s("%d", &liczba);
	void(*TabFun[4])() = { wczytaj, nowy, zapisz, wyswietl };
	while (dalej)
	{
		if (liczba>0 && liczba <= 4)
			TabFun[liczba - 1]();
		else if (liczba == 0) dalej = false;
		scanf_s("%d", &liczba);
	}



	return 0;
}
1
            fscanf_s(plik, "%s", tablica[ilosc].nazwisko); // tu bez znaku &
            fscanf_s(plik, "%d", &tablica[ilosc].pensja);
0

chyba chodzi o coś innego

0

Sprawdź co zwracają fopen_s i fscanf_s, pewnie gdzieś tam jest błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1