• 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
58 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ź 75 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)
0 głosów
3 odpowiedzi 121 wizyt
pytanie zadane 14 stycznia 2016 w C i C++ przez Sebastian R Obywatel (1,110 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

66,451 zapytań

113,207 odpowiedzi

239,680 komentarzy

46,704 pasjonatów

Przeglądających: 276
Pasjonatów: 10 Gości: 266

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.

...