• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawienie struktur danych

Object Storage Arubacloud
0 głosów
286 wizyt
pytanie zadane 11 marca 2019 w C i C++ przez Magmardo Początkujący (310 p.)
edycja 11 marca 2019 przez Magmardo

Witam,

mam do zrobienia zadanko, otóż program od użytkownika ma wczytać dowolną ilość osób (imię i nazwisko), ma on rozpoznać czy jest to kobieta czy mężczyzna, a następnie posortować osoby alfabetycznie. Program mi działał, dopóki nie wziąłem się za struktury danych, z tego, że dopiero uczę się ich używać, mam problem z dokończeniem całej struktury. Może ktoś mi pomóc z dokończeniem zadania? 

Poniżej zamieszczam kod:

#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;
         }
}

 

1 odpowiedź

–1 głos
odpowiedź 11 marca 2019 przez Perseusz Bywalec (2,190 p.)
Już w linii 6 zadeklarowałeś nowy typ jakim jest „Osoba” i dalej możesz go używać tak samo jak inta czy stringa tj. zamiast „struct Osoba osoba” -> „Osoba osoba”

Struct to słowo klucz służące do deklaracji a nie do odnoszenia się do typu

Od 15 linii tego kodu włącznie słowo struct jest zbędne
komentarz 11 marca 2019 przez RafalS VIP (122,820 p.)
Kolega ewidentnie pisze w C, gdzie wymagane jest powtórzenie slowa kluczowego struct w deklaracjach zmiennych tego typu.
komentarz 11 marca 2019 przez Perseusz Bywalec (2,190 p.)
A no to w takim razie przepraszam... zupełnie nie zauważyłem
komentarz 11 marca 2019 przez Magmardo Początkujący (310 p.)

@Perseusz,

Tak, ale już na początku, dokładnie w linii numer 29, wyskakuje błąd przy kompilacji "29 error: too many arguments to function 'void wczytajOsoby()', a to dopiero początek programu.

komentarz 11 marca 2019 przez Perseusz Bywalec (2,190 p.)
Wydaję mi się że chodzi o linię 21, 23 gdzie parametry nie zgadzają się z parametrami funkcji
komentarz 11 marca 2019 przez Perseusz Bywalec (2,190 p.)

no i nie wiem jak to w tym C / C++ jest, ale wczytajOsobe powinno być chyba wyżej od wczytajOsoby, skoro ją w niej wywołujesz

 

@Magmardo

komentarz 14 marca 2019 przez Magmardo Początkujący (310 p.)
Nic to nie zmieniło :/, kurczę w weekend muszę oddać projekt, mógłby mi ktoś pomóc w dokończeniu projektu?

Podobne pytania

0 głosów
0 odpowiedzi 275 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (350 p.)
0 głosów
1 odpowiedź 1,582 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)
0 głosów
2 odpowiedzi 905 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...