• 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

+1 głos
71 wizyt
pytanie zadane 20 stycznia w C i C++ przez Krzysztofs1234 Początkujący (290 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 przez adrian17 Ekspert (322,460 p.)

Dokładnie to samo :)

wczytaj(nazwastruktury *wskaźnik)

komentarz 20 stycznia przez Krzysztofs1234 Początkujący (290 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 przez adrian17 Ekspert (322,460 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 przez Krzysztofs1234 Początkujący (290 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 przez Krzysztofs1234 Początkujący (290 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ź 114 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 53 wizyt
pytanie zadane 28 stycznia 2020 w C i C++ przez amtrax Dyskutant (9,560 p.)
0 głosów
0 odpowiedzi 141 wizyt
pytanie zadane 29 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

88,720 zapytań

137,332 odpowiedzi

306,822 komentarzy

58,907 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

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

...