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

Poprawienie struktur danych

VPS Starter Arubacloud
0 głosów
271 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 262 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,557 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)
0 głosów
2 odpowiedzi 892 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...