Witam, napisałem poniższy program w którym używam m.in dynamicznych tablic i wskaźników do pobierania danych od użytkowników problem polega na tym, że wszystko działa poprawnie gdy pobieram dane od max 2 użytkowników. Gdy pobieram dane dla 3 to np. program gubi gdzieś nazwisko 3 osoby. Nie mogę dostrzec błędów w moim kodzie dlatego proszę o wytknięcie ich:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define dl1 30
#define dlugosc_plci 10
int main ()
{
int i, liczba;
char **imie;
char **nazwisko;
char **gender;
int *rok;
int *wiek;
char *plec;
char w[3][10]={"kobieta"};
char m[3][10]={"mezczyzna"};
printf ("Podaj liczbe: ");
scanf ("%d", &liczba);
printf ("%d\n", liczba);
imie= (char **)malloc(liczba * sizeof(char *));
nazwisko= (char**)malloc(liczba * sizeof(char *));
gender= (char**)malloc(liczba* sizeof(char *));
for (i=0; i<liczba; ++i)
{
imie[i] = (char *)malloc(dl1 * sizeof(char));
nazwisko[i] = (char *)malloc(dl1 * sizeof(char));
gender[i] = (char *)malloc(dlugosc_plci * sizeof(char));
}
rok = (int *)malloc(liczba * sizeof(int));
wiek = (int *)malloc(liczba * sizeof(int));
plec = (char *)malloc(liczba * sizeof(char));
char *wimie=imie[0];
char *wnazwisko=nazwisko[0];
char *wgender=gender[0];
int *wrok=&rok[0];
char *wplec=&plec[0];
int *wwiek=&wiek[0];
for (i=0; i<liczba; ++i)
{
printf ("Podaj imie: ");
scanf ("%s", wimie+dl1*i);
printf ("\n%s\n", wimie+dl1*i);
printf ("Podaj nazwisko: ");
scanf ("%s", wnazwisko+dl1*i);
printf ("\n%s\n", wnazwisko+dl1*i);
printf ("Podaj rok urodzenia:\n ");
scanf ("%d", (wrok+1*i));
*(wwiek+1*i)=2012-*(wrok+1*i);
printf ("Podaj plec: k - kobieta m - mezczyzna");
scanf ("%s", wplec+1*i);
if ((*(wplec+1*i) == 'k' || *(wplec+1*i) == 'K'))
{
strcpy (wgender+dlugosc_plci*i, w[0]);
printf ("\n %c %s\n", plec[i], wgender+dlugosc_plci*i);
}
if ((*(wplec+1*i) == 'm' || *(wplec+1*i) == 'M'))
{
strcpy (wgender+dlugosc_plci*i, m[0]);
printf ("\n %c %s\n", plec[i], wgender+dlugosc_plci*i);
}
}
wimie=imie[0];
wnazwisko=nazwisko[0];
wgender= gender[0];
wwiek= &wiek[0];
for (i=0; i<liczba; ++i)
{
printf ("\n%s\n", (wnazwisko+dl1*i));
}
printf ("Podsumowanie: \n");
for (i=0; i<liczba; ++i)
{
printf ("\n%s\ %s %d lat %d rok %s ", wimie+dl1*i, wnazwisko+dl1*i, *(wwiek+1*i), *(wrok+1*i), wgender+dlugosc_plci*i);
}
system ("pause");
return 0;
}