• 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

42 Warsaw Coding Academy
+1 głos
338 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 Mentor (353,220 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 Mentor (353,220 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ź 222 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 28 stycznia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
0 odpowiedzi 213 wizyt
pytanie zadane 29 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

93,382 zapytań

142,381 odpowiedzi

322,538 komentarzy

62,738 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
...