[C]Problem z warunkiem if/switch

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;

Wyjaśnienie: Zrobiłeś gdzieś błąd i musisz go znaleźć. :wink:

getch nie zwraca characteru, tylko kod w ASCII.

ale przy porwnaniach nie ma to znaczenia - bo char to waśnie typ danych długości jednego bajta, bez znaku.

Ale co miałby robić program po wybraniu opcji ‘2’ skoro napisałeś, że ma tylko drukować napis? A jak nie ma co zapisywć,  bo nie dodałeś danych to nic nie zapisze.