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

C: Void - dostęp do tablicy struktur

Object Storage Arubacloud
+1 głos
254 wizyt
pytanie zadane 20 stycznia 2022 w C i C++ przez Krzysztofs1234 Użytkownik (890 p.)

Dzień dobry,

próbuję napisać funkcję void wczytaj, aby wypełnić tablicę struktur. Nie wiem natomiast, jakie argumenty dać w funkcji. Kiedy była to jedna struktura, to deklarowałem funkcję void wczytaj(nazwastruktury *wskaźnik) i przez wskaźnik uzupełniałem dane. Natomiast nie wiem, co zadeklarować, aby "przechodzić" przez elementy tablicy struktur. Struktura "pracownicy" jest globalna, ale tablica "pracownicy" nie, więc nie mogę jej dać do argumentu funkcji.

Uprzejmie proszę o pomoc.

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

struct pracownicy{
    char imie[15];
    char nazwisko[25];
    short int godziny;
    float stawka;
    float premia;
    float placa;
                };

void wczytaj(, short int n);

int main()
{
    short int N;
    printf("Podaj liczbe pracownikow: ");
    scanf("%hd", &N);
    struct pracownicy pracownik[N];


    return 0;
}

void wczytaj(, short int n)
{
    for (short int i=0; i<n; i++)
    {
        printf("Podaj imie: ");
        fgets(pracownik[i].imie, 15, stdin);

        printf("Podaj nazwisko: ");
        fgets(pracownik[i].nazwisko, 25, stdin);

        printf("Podaj liczbe godzin pracy: ");
        scanf("%hd", &(pracownik[i].godziny));

        printf("Podaj stawke za godzine: ");
        scanf("%f", &(pracownik[i].stawka));

        printf("Podaj wartosc premii w punktach procentowych: ");
        scanf("%f", &(pracownik[i].premia));
    }
}


 

1 odpowiedź

0 głosów
odpowiedź 20 stycznia 2022 przez adrian17 Ekspert (344,860 p.)

Dokładnie to samo :)

wczytaj(nazwastruktury *wskaźnik)

komentarz 20 stycznia 2022 przez Krzysztofs1234 Użytkownik (890 p.)

No niestety dalej stoję w miejscu. Nie wiem, czy już tego nie próbowałem wcześniej. W każdym razie myślałem, że dobrze podałem adres i później w pętli for będę mógł inkrementować wskaźnik, ale nie mogę.

22|warning: passing argument 1 of 'wczytaj' from incompatible pointer type [-Wincompatible-pointer-types]|

13|note: expected 'struct pracownicy *' but argument is of type 'struct pracownicy (*)[(sizetype)(N)]'|

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

struct pracownicy{
    char imie[15];
    char nazwisko[25];
    short int godziny;
    float stawka;
    float premia;
    float placa;
                };

void wczytaj(struct pracownicy *p, short int n);

int main()
{
    short int N;
    printf("Podaj liczbe pracownikow: ");
    scanf("%hd", &N);
    struct pracownicy pracownik[N];

    wczytaj(&pracownik, N);

    return 0;
}

void wczytaj(struct pracownicy *p, short int n)
{
    for (short int i=0; i<n; i++)
    {
        printf("Podaj imie: ");
        fgets(p->imie, 15, stdin);

        printf("Podaj nazwisko: ");
        fgets(p->nazwisko, 25, stdin);

        printf("Podaj liczbe godzin pracy: ");
        scanf("%hd", &(p->godziny));

        printf("Podaj stawke za godzine: ");
        scanf("%f", &(p->stawka));

        printf("Podaj wartosc premii w punktach procentowych: ");
        scanf("%f", &(p->premia));
        p++;
    }
}

 

komentarz 20 stycznia 2022 przez adrian17 Ekspert (344,860 p.)
wczytaj(&pracownik, N);

zmienna typu tablicowego jest równoważna wskaźnikowi na pierwszy jego element.

Więc wystarczy po prostu:

wczytaj(pracownik, N);

 

komentarz 20 stycznia 2022 przez Krzysztofs1234 Użytkownik (890 p.)

Hah, no przecież ;D Żeby nie było tak kolorowo, ujawnił się kolejny problem. Program nie czeka aż wpiszę imię. Usunięcie spacji po dwukropki w 31 linijce nic nie daje. Podobnie kombinowanie ze spacjami przy scanf. 

komentarz 21 stycznia 2022 przez Krzysztofs1234 Użytkownik (890 p.)
Skorzystałem z fflush(stdin) i on musi być w pętli i czyścić bufor wczytywania za każdym razem, aby nie pomijało mi wczytywania imienia.

Podobne pytania

0 głosów
1 odpowiedź 182 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 88 wizyt
pytanie zadane 28 stycznia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
0 odpowiedzi 172 wizyt
pytanie zadane 29 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 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!

...