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

Wskaźniki do struktur - język C

42 Warsaw Coding Academy
0 głosów
1,097 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)

Witam. 

Napisałem prosta strukturę zawierająca dane pracownika.

Zrobiłem funkcje dodającą nowego pracownika do bazy:

void dodaj()
{
    int tmp;
    printf("Ilu pracownikow chcesz dodac?(1-10): ");
    scanf("%d", &ilosc_prac);

    for(int i=1; i<=ilosc_prac; i++){
        printf("Podaj ID %d pracownika(0-9): \n", i);
        scanf("%d", &tmp);
        baza[i].ID=tmp;
        printf("Podaj imie %d pracownika: \n", i);
        scanf("%s", baza[tmp].imie);
        printf("Podaj nazwisko %d pracownika: \n", i);
        scanf("%s", baza[tmp].nazwisko);
        printf("Podaj dzien, miesiac, rok urodzenia %d pracownika: \n", i);
        scanf("%d %d %d", &baza[tmp].data_ur.dzien, &baza[tmp].data_ur.miesiac, &baza[tmp].data_ur.rok);
        printf("Podaj adres %d pracownika: \n", i);
        fflush(stdin); //czyszczenie wejscia
        fgets(baza[tmp].adres, sizeof DL, stdin); 
        printf("Podaj wiek %d pracownika: \n", i);
        scanf("%d", &baza[tmp].wiek);
        printf("Podaj staz pracy %d pracownika: \n", i);
        scanf("%d", &baza[tmp].staz_pracy);
        printf("Podaj miesieczne wynagrodzenie %d pracownika: \n", i);
        scanf("%lf", &baza[tmp].wynagrodzenie);
    }
    printf("Pomyslnie dodano pracownikow.\n");
    powrot();
}

Moje pytanie brzmi, jak mógłbym to przerobić aby operować wskaznikami?

 

komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
Gdzie reszta kodu? Tutaj nic nie widać. W jakim sensie operowala na wskaznikach?

1 odpowiedź

0 głosów
odpowiedź 14 czerwca 2018 przez Mithriandil Początkujący (250 p.)

W takim sensie, żeby dostęp do pól był poprzez wskaźniki. 

Taka "lepsza" wersja tego programu. 

Sktuktury wygladaja tak:

struct data{
    int dzien;
    int miesiac;
    int rok;
};

struct pracownik{
    int ID;
    char imie[DL];
    char nazwisko[DL];
    char adres[DL];
    int wiek;
    int staz_pracy;
    double wynagrodzenie;
    struct data data_ur;    //struktura zagniezdzona
};

struct pracownik baza[N]={0};

 

komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
Jedyne miejsce gdzie sensownie możesz to dodać to pole data_ur w strukturze pracownik. Tylko to komplikuje troche rzeczy, musiałbyś stosować dynamiczną alokację, żeby w funkcji dodaj dodawać to pole.
komentarz 14 czerwca 2018 przez Mithriandil Początkujący (250 p.)
A np w funkcji wyswietlajacej pracownika?

Ogolnie potrzebuje w moim kodzie gdzies zapakowac wskazniki(chodzo o egzamin, powinny znajdowac sie w kodzie, a srednio dobrze sie z nimi czuje)
komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
nie wiem jak ona wygląda :D
komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
ale generalnie nie będzie to miało sensu
komentarz 14 czerwca 2018 przez Mithriandil Początkujący (250 p.)

To moze odpuszcze, a z innej beczki.

Jak najlepiej jest podzielic profekt na pliki?

W pliku my_header.h powinienem umiescic deklaracje funkcji oraz potrzebne biblioteki, czyli np?


#include <stdio.h>
#include <stdlib.h>

#define MC_W_ROKU 12
#define N 10

void dodaj();
void usun();

W pliku funkcje.c zalaczylem deklaracje makrodefinicji oraz ciala funkcji dodaj, usun itd

Natomiast w pliku main.c umiescilem tylko menu i wywolania tych funkcji.

 

Czy taki podzial jest OK? Generalnie nie wiem gdzie umiescic struktury, narazie mam je w my_header.h ale nie wiem czy powinienem przeniesc je do innego pliku? Licze na pomoc

 

komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
Taki podział jest dobry
komentarz 14 czerwca 2018 przez Mithriandil Początkujący (250 p.)

Dziekuje za odpowiedz.

CO musialbym zmienic jesli chcialbym do funkcji przekazac jako argument strukture? COs takiego:

void dodaj(struct pracownik baza[], int ilosc_prac)

zamiast:

void dodaj();

 

komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
I to mi się podoba, bo ta tablica globalna jest bardzo brzydka. Generalnie nic byś nie musiał zmieniać :D Poza wywołaniem funkcji w mainie i przesunieciem deklaracji tablicy do maina :P
komentarz 14 czerwca 2018 przez Mithriandil Początkujący (250 p.)
Nie wiem czy dobrze sie zrozumielismy.

To void dodaj() jest lepsze czy void dodaj(struct pracownik baza[]) ?
komentarz 14 czerwca 2018 przez RafalS VIP (122,820 p.)
zdecydowanie to jest lepsze dodaj(struct pracownik baza[])

Podobne pytania

0 głosów
1 odpowiedź 657 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)
0 głosów
1 odpowiedź 1,160 wizyt
pytanie zadane 3 czerwca 2017 w C i C++ przez J0ker Pasjonat (15,420 p.)
0 głosów
1 odpowiedź 222 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

93,385 zapytań

142,384 odpowiedzi

322,540 komentarzy

62,745 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...