• 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ć

0 głosów
207 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ź 982 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 884 wizyt
pytanie zadane 12 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)
0 głosów
2 odpowiedzi 550 wizyt

93,692 zapytań

142,611 odpowiedzi

323,220 komentarzy

63,220 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...