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

Zapis i odczyt pliku - C

0 głosów
41 wizyt
pytanie zadane 3 listopada w C i C++ przez gorgonek Początkujący (480 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 przez RafalS Szeryf (81,250 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 przez gorgonek Początkujący (480 p.)
edycja 3 listopada przez gorgonek
Hmm... czyli ten WprowadzStudenta(TDane x) jest niepoprawny?
komentarz 4 listopada przez gorgonek Początkujący (480 p.)
Próbowałam cały dzień kombinować, jednak bezskutecznie :/

Podobne pytania

0 głosów
1 odpowiedź 46 wizyt
pytanie zadane 7 grudnia w C i C++ przez matiibal Początkujący (400 p.)
0 głosów
1 odpowiedź 58 wizyt
pytanie zadane 7 listopada w C i C++ przez gorgonek Początkujący (480 p.)
0 głosów
1 odpowiedź 58 wizyt
pytanie zadane 4 dni temu w Java przez Mateusz Jabłoński Nowicjusz (120 p.)
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

57,748 zapytań

102,788 odpowiedzi

212,076 komentarzy

29,694 pasjonatów

Przeglądających: 320
Pasjonatów: 14 Gości: 306

Motyw:

Akcja Pajacyk

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

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

...