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

Zapis i odczyt pliku - C

Object Storage Arubacloud
0 głosów
245 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

Siemka. Chciałabym się Was zapytać, co źle napisałam w kodzie w funkcji int main():
 

#include <stdlib.h>
#include <stdio.h>
#define PLIK "plik.txt"

typedef struct
{
    char nazwisko[20], imie[20];
    int rok_ur;
    float srednia;
} TDane;

typedef struct
{
    TDane d;
    struct TElement* next;
} TElement;

typedef TElement* TWsk;

int WprowadzStudenta(TDane *x);
int WyswietlStudenta(TDane x);
int NaStos(TWsk *P, TDane x);
int ZeStosu(TWsk *P, TDane *x);
int WprowadzDane(TWsk *P);
int UsunStos(TWsk *P);
int WyswietlStos(TWsk P);
float ZwrocSrednia(TWsk P);
int NajwiekszyElement(TWsk P);

int main()
{
    FILE *pliczek;
    TDane x;
    TWsk P;
    P=NULL;
    WprowadzDane(&P);
    printf("\nWprowadzono nastepujace dane: \n");
    printf("Srednia: %.2f\n", ZwrocSrednia(P));
    printf("Najwiekszy element: %d\n", NajwiekszyElement(P));
    UsunStos(&P);
    pliczek = fopen(PLIK, "w");
    fprintf(pliczek, "%s %s %d %f", WprowadzStudenta(TDane *x));
    fclose(pliczek);
    return 0;
}

int WprowadzStudenta(TDane *x)
{
    printf("Podaj nazwisko: ");
    scanf("%s", x->nazwisko);
    printf("Podaj imie: ");
    scanf("%s", x->imie);
    printf("Podaj rok urodzenia: ");
    scanf("%d", &x->rok_ur);
    printf("Podaj srednia: ");
    scanf("%f", &x->srednia);
    return 0;
}

int WyswietlStudenta(TDane x)
{
    printf("%s %s %d %4.2f\n", x.nazwisko, x.imie, x.rok_ur, x.srednia);
    return 0;
}

int NaStos(TWsk *P, TDane x)
{
    TWsk Q;
    Q=(TElement*)malloc(sizeof(TElement));
    Q->d=x;
    Q->next=(*P);
    (*P)=Q;
    return 0;
}

int ZeStosu(TWsk *P, TDane *x)
{
    TWsk Q;
    if(P!=NULL)
    {
        Q=(*P);
        *x=Q->d;
        (*P)=Q->next;
        free(Q);
    }
    return 0;
}

int WprowadzDane(TWsk *P)
{
    int n, i;
    TDane x;
    printf("Dane ilu osob chcesz wprowadzic?: ");
    scanf("%d", &n);
    for(i=1; i<=n; i++)
    {
        printf("%d osoba: \n", i);
        WprowadzStudenta(&x);
        NaStos(&(*P), x);
    }
    return 0;
}

int UsunStos(TWsk *P)
{
    TDane x;
    while((*P)!=NULL)
    {
        ZeStosu(&(*P), &x);
        WyswietlStudenta(x);
    }
    return 0;
}

int WyswietlStos(TWsk P)
{
    while (P!=NULL)
    {
        WyswietlStudenta(P->d);
        P=P->next;
    }
    return 0;
}

float ZwrocSrednia(TWsk P)
{
    float sum_srednia = 0.f;
    int ilosc = 0;
    while(P!= NULL){
        sum_srednia += P->d.srednia;
        ++ilosc;
        P = P->next;
    }
    if( ilosc == 0)
        return 0.f;

    return  sum_srednia/ilosc;
}

int NajwiekszyElement(TWsk P)
{
    int najwiekszy = 0;
    int ile = 0;
    while(P!=NULL)
    {
        if(P->d.rok_ur>najwiekszy)
        najwiekszy = P->d.rok_ur;
        ++ile;
        P = P->next;
    }
    if(ile==0)
    {
        printf("Brak najwiekszego elementu!");
        return 0;
    }

    return najwiekszy;
}

Błąd w kompilatorze jest jeden i brzmi "error: expected expression before 'TDane' "
To jest linijka:
 

    fprintf(pliczek, "%s %s %d %f", WprowadzStudenta(TDane *x));

Bardzo proszę o wytłumaczenie i pomoc.

1 odpowiedź

0 głosów
odpowiedź 3 listopada 2018 przez RafalS VIP (122,820 p.)
fprintf(pliczek, "%s %s %d %f", WprowadzStudenta(TDane *x));

Nie czytalem calego kodu, ale 3. argument funkcji wygląda jak deklaracja typu argumentu przekazywanego do funkcji, który moze sie pojawic w deklaracji funkcji ale nie w jej wywołaniu.

komentarz 3 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)
edycja 3 listopada 2018 przez gorgonkowa
Hmm... czyli ten WprowadzStudenta(TDane x) jest niepoprawny?
komentarz 4 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)
Próbowałam cały dzień kombinować, jednak bezskutecznie :/

Podobne pytania

0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 7 grudnia 2018 w C i C++ przez matiibal Użytkownik (620 p.)
0 głosów
2 odpowiedzi 1,314 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez nooblike Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 221 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez VecsonON Nowicjusz (190 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...