Witam wszystkich,
mam problem z dokończeniem programu którego otrzymałem do zrobienia, otóż, na początek wykonałem sam program który oczywiście działał. Musi on wczytać od użytkownika dowolną ilość osób, a następnie rozpoznać czy jest to kobieta i posortować alfabetycznie. Problem nastąpił wtedy, gdy zacząłem tworzyć struktury danych, a to, że dopiero zaczynam się ich uczyć, to oczywiście musiałem coś popsuć. Ktoś mógłby wskazać gdzie leży błąd, a najlepiej poprawić po mnie linijki kodu? Byłbym bardzo wdzięczny za wszelką pomoc. Pozdrawiam.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
struct Osoba
{
char nazwisko[40];
char imie[30];
bool kobieta;
};
struct Osoby
{
struct Osoba osoby[40];
int ilosc_osob;
};
void wczytajOsoby();
void sortujOsoby(struct Osoba osoba[], int cnt);
void wypiszOsoby();
int main()
{
struct Osoby osoby;
wczytajOsoby( & osoby );
sortujOsoby( & osoby);
wypiszOsoby( & osoby );
return 0;
}
void wczytajOsoby( struct Osoby * osoby)
{
printf("Ilosc danych do wpisania: ");
scanf("%d", & osoby->ilosc_osob);
for (int i=0;i<osoby->ilosc_osob;i++)
wczytajOsobe( & osoby->osoby[i] );
}
bool wczytajOsobe( struct Osoba * osoba )
{
printf("Podaj naziwsko: ");
scanf("%s", osoba->nazwisko);
printf("Podaj imie: ");
scanf("%s", osoba[i].imie);
if(osoba[i].imie[strlen(osoba[i].imie)-1]=='a')
osoba[i].kobieta='k';
}
void wypiszOsoby(struct Osoby * osoby )
{
int i;
for(i = 0; i < osoby->ilosc_osob; i++)
{
wyswietlOsobe( & osoby->osoby[i] );
printf(" %s %s %c\n\n" , osoba[i].nazwisko, osoba[i].imie, osoba[i].kobieta ? 'k' : 'm');
}
}
void sortujOsoby(struct Osoby * osoby)
{
int i,j;
struct Osoba tmp;
for(i = 1;i < cnt; ++i){
tmp = osoby->osoby[i];
j = i - 1;
while (j >= 0 && strcmp(osoba[i].nazwisko,osoba[j].nazwisko)<0){
osoba[j + 1] = osoba[j];
j = j - 1;
}
osoba[j + 1] = tmp;
}
}