Witam
napisałem taki o to program, całość kompiluje się prawidłowo. Docelowo program miał zebrać wpisane osoby podzielić na płcie i wyświetlić oddzielnie.
Program wysypuje się po wpisaniu osób czy ktoś mógłby spojrzeć na kod i naprowadzić mnie gdzie leży błąd?
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
struct Osoba
{
char imie[10];
char nazwisko[20];
bool plec; //TRUE MEZCZYZNA | FALSE KOBIETA
};
struct Osoby
{
struct Osoba osoby[40];
int ilosc_osob;
};
void wczytajOsoby( struct Osoby * osoba );
void wczytajOsobe( struct Osoba * osoba );
void sortujOsoby( struct Osoby * osoby );
void wyswietlOsoby( struct Osoby * osoby );
int main()
{
struct Osoby osoby;
wczytajOsoby(&osoby);
sortujOsoby(&osoby);
wyswietlOsoby(&osoby);
return 0;
}
void wczytajOsoby(struct Osoby * osoby) // WCZYTYWANIE OSOB
{
printf( "Podaj liczbe osob:");
scanf( "%d", &(osoby->ilosc_osob) );
for( int i = 0; i < osoby->ilosc_osob; ++i)
wczytajOsobe(&(osoby->osoby[i]));
}
void wczytajOsobe( struct Osoba * osoba ) // WCZYTYWANIE OSOBY
{
puts("Podaj imie: ");
scanf("\n%s",osoba->imie);
puts("Podaj nazwisko: ");
scanf("\n%s",osoba->nazwisko);
if(strlen(osoba->nazwisko)-1 == 'a')
{
osoba->plec = false;
}
else
{
osoba->plec = true;
}
}
void sortujOsoby( struct Osoby * osoby ) // SORTOWANIE OSOB
{
for(int i=0; i < osoby->ilosc_osob; i++)
{
for(char schowek[20]; strcmp(osoby->osoby[i].nazwisko, osoby->osoby[i+1].nazwisko)>0;)
{
schowek[20]= osoby->osoby[i].nazwisko[20];
osoby->osoby[i].nazwisko[20] = osoby->osoby[i+1].nazwisko[20];
osoby->osoby[i+1].nazwisko[20]= schowek[20];
}
}
}
void wyswietlOsoby( struct Osoby * osoby ) // WYSWIETLANIE OSOB
{
printf("MEZCZYZNI:/n");
for(int i=0; i < osoby->ilosc_osob; i++)
{
if (osoby->osoby[i].plec == true)
{
printf("Imie:%s Nazwisko:%s",osoby->osoby[i].imie,osoby->osoby[i].nazwisko);
}
}
printf("KOBIETY:/n");
for(int i=0; i < osoby->ilosc_osob; i++)
{
if (osoby->osoby[i].plec == false)
{
printf("Imie:%s Nazwisko:%s",osoby->osoby[i].imie,osoby->osoby[i].nazwisko);
}
}
}