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

Pierwszy element kolejki (struktury) pobrany z klawiatury nie chce się wyświetlić

Object Storage Arubacloud
0 głosów
120 wizyt
pytanie zadane 26 czerwca 2018 w C i C++ przez Tomski Nowicjusz (120 p.)

Witam bardzo serdecznie. Siedzę nad tym już kilka godzin i nie wiem gdzie robię błąd ...poddaję się, stąd prośba o pomoc. Ogólnie mam do napisania program (wiadomo na studia). Program dotyczy kolejki FIFO i LIFO.
Program polega na wprowadzeniu case'a co będziemy robić - jaką kolejkę, a następnie w pętli ma dodawać lub usuwać dowolne elementy. Zanim jednak dojdziemy do końca to chodzi mi bardziej o naprowadzenie co robię nie tak. 

Obecnie program ma za zadanie - wybrać kolejkę (na razie jest to tylko FIFO czyli trzeba pisać 1) stworzyć ją w oparciu o struktury i wyświetlić wprowadzoną wartość (jako test poprawności działania). Niestety tego nie robi - nie wiem dlaczego konkretnie nie chce wyświetlić elementy struktury pierwszy a przecież wpisuje go z klawiatury "cinem". Errory nie wyskakują w kompilatorze. 

Z góry proszę o wyrozumiałość bo niestety dopiero zaczynam programowanie i wskaźniki więc coś co dla innych wydaje się oczywiste może dla mnie może być czymś nie do przeskoczenia. 

 

#include <iostream>
#include <string.h>
#include <cstdlib>

using namespace std;
 struct element_fifo{
    int numer;
    element_fifo *nastepny;
    }*pierwszy;
int liczba;

int main()
{
    int wybor =0;
    cout << "Wybierz co chcesz zrobic"<<endl;
    cout << "Wybor kolejki FIFO - First in first out - czyli inaczej typowej kolejki to nacisnij 1"<<endl;
    cout << "Wybor kolejki LIFO - Last in first out - czyli inaczej stosu to nacisnij 2"<<endl;
    cin>>wybor;
    switch(wybor){
case 1:
    cout<<"Wybrales 1 czyli kolejke FIFO";


    cout<<"Lista jest pusta - podaj liczbe jaka chcesz dodac do kolejki FIFO";
    cin>>liczba;
    pierwszy->numer=liczba;
    cout<<"Dodales element :"<< pierwszy->numer;

    break;


break;
case 2:
    cout<<"Wybrales 2 czyli kolejke LIFO";
    break;
    }

    return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 26 czerwca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
struct element_fifo {
    int numer;
    element_fifo *nastepny;
}*pierwszy;

Tworzysz jedynie wskaźnik na strukturę. Dopóki nie przypiszesz do tego wskaźnika adresu istniejącego obiektu, odwoływanie się do elementów struktury jest niezdefiniowanym zachowaniem.

komentarz 26 czerwca 2018 przez Tomski Nowicjusz (120 p.)

Teraz działa :), czy tak jest ok? 


#include <iostream>
#include <string.h>
#include <cstdlib>

using namespace std;
 struct element_fifo{
    int numer;
    element_fifo *nastepny;
    };
int liczba;

int main()
{
    element_fifo *pierwszy = new element_fifo;
    int wybor =0;
    cout << "Wybierz co chcesz zrobic"<<endl;
    cout << "Wybor kolejki FIFO - First in first out - czyli inaczej typowej kolejki to nacisnij 1"<<endl;
    cout << "Wybor kolejki LIFO - Last in first out - czyli inaczej stosu to nacisnij 2"<<endl;
    cin>>wybor;
    switch(wybor){
case 1:
    cout<<"Wybrales 1 czyli kolejke FIFO";


    cout<<"Lista jest pusta - podaj liczbe jaka chcesz dodac do kolejki FIFO";
    cin>>liczba;
    pierwszy->numer=liczba;
    cout<<"Dodales element :"<< pierwszy->numer;

    break;


break;
case 2:
    cout<<"Wybrales 2 czyli kolejke LIFO";
    break;
    }

    return 0;
}



 

 

Mam pytanie czy po opisie struktury 

struct jakas{} *o_to_mi_chodzi;

*o_to_mi_chodzi nie jest równoznaczne z napisaniem?

jakas *o_to_mi_chodzi =new jakas; 

 

komentarz 26 czerwca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Jak używasz new, to pamiętaj, żeby także używać delete. W przeciwnym przypadku będziesz pisał programy z wyciekami pamięci. Najlepiej zamiast new i delete używać kontenerów STL i smart pointerów, ale to już trochę inny temat.

Co do drugiego pytania, nie jest równoznaczne. Pierwsze to tylko deklaracja wskaźnika. Dopóki mu nie przypiszesz adresu istniejącego obiektu, nie wskazuje na nic sensownego.

Podobne pytania

0 głosów
1 odpowiedź 656 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)
0 głosów
2 odpowiedzi 378 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

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

...