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

Wyszukaj osobę - C

0 głosów
603 wizyt
pytanie zadane 12 listopada 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

Siemka. Chciałabym się Was zapytać, co zmienić w tej funkcji, żeby działała? Chodzi mi o taką wyszukiwarkę osób w języku C na podstawie podania nazwiska. Na razie przedstawia się tak:
 

int WyszukajOsobe(TDane x)
{
    printf("Podaj nazwisko: ");
    if(x.nazwisko==true)
    {
        WyswietlStudenta(x);
        return 0;
    }
    else
    {
        printf("Nie ma takiej osoby!");
        return 0;
    }
}

Ale pokazuje error, że "true" jest niezadeklarowane. Co można zrobić z tą funkcją żeby ją poprawić?
Będę wdzięczna za pomoc!

1 odpowiedź

0 głosów
odpowiedź 12 listopada 2018 przez VirtualMember Pasjonat (15,790 p.)

Taka rada, jeśli Twoje x.nazwisko samo w sobie jest wartością logiczną, to nie przyrównuj tego do true tylko napisz po prostu

if(x.nazwisko)
    {
        WyswietlStudenta(x);
        return 0;
    }

 

komentarz 12 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)
Bardzo dziękuję za pomoc. :) Hmm... teraz program tak naprawdę od razu kończy program bez wpisania nazwiska, tak jakby pojawiły się dwa kwadraciki, czyli jakieś same zera automatycznie wprowadzone. Czy tutaj należy użyć scanf w funkcji?
komentarz 12 listopada 2018 przez VirtualMember Pasjonat (15,790 p.)
Tak, ponieważ chcesz wczytać nazwisko a nigdzie nie używasz funkcji do inputu. Faktycznie musisz je wczytać
komentarz 12 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)

Poprawiłam funkcję na taką:
 

int WyszukajOsobe(TDane x)
{
    int n;
    printf("Podaj nazwisko: ");
    scanf("%d", &n);
    if(x.nazwisko)
    {
        WyswietlStudenta(x);
        return 0;
    }
    else
    {
        printf("Nie ma takiej osoby!");
        return 0;
    }
}

Teraz mogę wpisać wyszukiwaną osobę, jednak po wciśnięciu Entera wyskakują same zera zamiast danych osoby. Czy coś zrobiłam nie tak? :P

komentarz 12 listopada 2018 przez VirtualMember Pasjonat (15,790 p.)
Musisz pokazać więcej kodu, na pierwszy rzut nie podoba mi się, że nazwisko jest intem, chyba, że tak miało być. Tak samo x.nazwisko jest wartością logiczną?
komentarz 12 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)

Cały kod:
 

#include <stdlib.h>
#include <stdio.h>
#define PLIK "oceny.dat"

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", x.imie, x.nazwisko, x.rok_ur, x.srednia);
    WyszukajOsobe(&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;
}

int WyszukajOsobe(TDane x)
{
    int n;
    printf("Podaj nazwisko: ");
    scanf("%d", &n);
    if(x.nazwisko)
    {
        WyswietlStudenta(x);
        return 0;
    }
    else
    {
        printf("Nie ma takiej osoby!");
        return 0;
    }
}


 

komentarz 12 listopada 2018 przez Eminiox Obywatel (1,500 p.)

Nie pomogę Ci, ale nawet nie wiesz jak bardzo ten kod byłby czytelny, gdybyś używała normalnych nazw zmiennych, np. ten kod:

 

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


przypomina hieroglify aniżeli coś sensownego.
@edit ps. Do tego wnerwia mnie "polski kod". Jeżeli składnia jest po angielsku to fajnie byłoby używać też angielskich nazw funkcji, zmiennych itd.

komentarz 12 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)
Cóż, masz świętą rację. Niestety, to kod pana doktora z uczelni i nie można go zmieniać. Wiadomo, że łatwiej by było nazywać funkcje jakoś w miarę czytelniej, a nie jakimiś literkami, można kręćka dostać. Ale i tak dziękuję za odpowiedź. :)

Podobne pytania

–1 głos
3 odpowiedzi 645 wizyt
pytanie zadane 7 listopada 2024 w Systemy operacyjne, programy przez Nitr0Skay Użytkownik (690 p.)
0 głosów
1 odpowiedź 394 wizyt
pytanie zadane 14 listopada 2019 w HTML i CSS przez luna22 Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 593 wizyt
pytanie zadane 9 kwietnia 2019 w Inne języki przez Rejfi Nowicjusz (150 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...