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

Poprawienie struktur danych

0 głosów
63 wizyt
pytanie zadane 11 marca w C i C++ przez Magmardo Początkujący (310 p.)
edycja 11 marca 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 przez Perseusz Bywalec (2,210 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 przez RafalS VIP (113,350 p.)
Kolega ewidentnie pisze w C, gdzie wymagane jest powtórzenie slowa kluczowego struct w deklaracjach zmiennych tego typu.
komentarz 11 marca przez Perseusz Bywalec (2,210 p.)
A no to w takim razie przepraszam... zupełnie nie zauważyłem
komentarz 11 marca 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 przez Perseusz Bywalec (2,210 p.)
Wydaję mi się że chodzi o linię 21, 23 gdzie parametry nie zgadzają się z parametrami funkcji
komentarz 11 marca przez Perseusz Bywalec (2,210 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 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 78 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (280 p.)
0 głosów
1 odpowiedź 256 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)
0 głosów
2 odpowiedzi 363 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

66,520 zapytań

113,288 odpowiedzi

239,922 komentarzy

46,652 pasjonatów

Przeglądających: 225
Pasjonatów: 13 Gości: 212

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...