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

Wyszukaj osobę - C

Object Storage Arubacloud
0 głosów
184 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

0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 14 listopada 2019 w HTML i CSS przez luna22 Obywatel (1,420 p.)
0 głosów
2 odpowiedzi 275 wizyt
pytanie zadane 9 kwietnia 2019 w Inne języki przez Rejfi Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 171 wizyt
pytanie zadane 16 maja 2018 w Offtop przez adadadadadadad Nowicjusz (120 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!

...