Masz niezgodności deklaracji z definicjami. Inne typy argumentów i inne typy zwracane. W jednej miałeś typ zwracany bool w definicji mimo, że w funkcji nie ma żadengo return, a zadeklarowana jest jako void. Generalnie wygląda jakby ktoś pisał to po pijaku, no wybacz XD
#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;
int cnt;
};
void wczytajOsoby( struct Osoby * osoby);
void sortujOsoby(struct Osoby * osoby);
void wypiszOsoby(struct Osoby * osoby);
void wyswietlOsobe(struct Osoba * osoba);
void wczytajOsobe(struct Osoba * osoby);
int main()
{
struct Osoby osoby;
wczytajOsoby( & osoby );
sortujOsoby( & osoby );
wypiszOsoby( & osoby );
//wyswietlOsobe( & osoby ); //?????
wczytajOsoby( & 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] );
}
void wczytajOsobe( struct Osoba * osoba )
{
printf("Podaj naziwsko: ");
scanf("%s", & osoba->nazwisko);
printf("Podaj imie: ");
scanf("%s", osoba->imie);
if(osoba->imie[strlen(osoba->imie)-1]=='a')
osoba->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->nazwisko, osoba->imie, osoba->kobieta ? 'k' : 'm');
}
}
void sortujOsoby(struct Osoby * osoby)
{
int i,j;
struct Osoba tmp;
int cnt;
for(i = 1;i < cnt; ++i){
tmp = osoby->osoby[i];
j = i - 1;
while (j >= 0 && strcmp(osoba->nazwisko,osoba->nazwisko)<0){ // w ogole nie ma czegos takiego jak `osoba`
osoba[j + 1] = osoba[j];
j = j - 1;
}
osoba[j + 1] = tmp; // w ogole nie ma czegos takiego jak `osoba`
}
}
Poprawilem ci te dziwne niezgodnosci miedzy definicjami i deklaracjami, ale nadal jest troche pokopany. Ale mysle, że teraz juz sobie poradzisz.
Btw. `wyswietlOsobe` nie jest nawet zdefiniowana.