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

Struktura pomoc w dodawaniu nowego obiektu

Object Storage Arubacloud
0 głosów
157 wizyt
pytanie zadane 24 lutego 2018 w C i C++ przez zazu623 Nowicjusz (150 p.)

Witam problem polega na tym że kiedy dodaję nową książkę, aby program działał poprawnie muszę wpisać tylko 1 słowo, ponieważ kiedy wpiszę 2 program omija opcje i przechodzi do kolejnej. Jak to naprawić? 

 

// dodawanie, usuwanie oraz wyswietlanie utowrzonych przez nas ksiazek

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

struct book // towrzenie pojedynczej struktury book
{
    string tytul;        // wypisanie wszystkich potrzebnych danych
    string imie;
    string nazwisko;
    int dzien,miesiac,rok,ilosc_stron;

    book *nastepny;    // tworzenie wskaznika na nastepny element listy

    book() // konstruktor ktory wywolamy przy tworzeniu obiektu
    {
      // wczytujemy potrzebne dane
        cout << "Podaj Tytul Ksiazki: ";cin>>tytul;
        cout << "Podaj Imie Autora: ";cin>>imie;
        cout << "Podaj Nazwisko Autora: ";cin>>nazwisko;
        cout << "\n";
        cout << "Data Wydania ( DD/MM/RRRR) oraz ilosc stron:\n";
        cout << "\n";
        cout << "Podaj Dzien: "; cin>>dzien;
        cout << "Podaj Miesiac: "; cin>>miesiac;
        cout << "Podaj Rok: "; cin>>rok;
        cout << "Podaj ilosc stron: "; cin>>ilosc_stron;
        cout << "\n";
        // ustawiamy wskaznik na NULL
        nastepny=NULL;
    }
    void pokaz() // funckja wyswietlajaca ksiazke
    {
        cout<<"Tytul: "<<tytul<<"\nAutor: "<<imie<<" "<<nazwisko<<"\nData Wydania: "<<dzien<<"."<<miesiac<<"."<<rok<<"\nStron: "<<ilosc_stron<<"\n"; // nr indeksu 241839.
    }

};

void dodaj_ksiazke(book **wskaznik)
{
    book *nowa=new book;  // utworzenie nowej ksiazki
    book *pomoc = (*wskaznik), *pomoc1 = NULL;  // wskazniki ulatwiajace okreslenie poczatku listy

   if ((*wskaznik) == NULL) // nowa ksiazka bedzie wskaznikiem listy
   {
       nowa->nastepny = (*wskaznik);
       (*wskaznik) = nowa;
   }
   else // ustawiamy wskaznik na poczatek lub  srodek listy
   {
       pomoc1->nastepny = nowa;
       nowa->nastepny = pomoc;
   }

}

void wyswietl(book *wskaznik) // wyswietlanie wszystkich ksiazek
{
    cout<<"Dostepne w Bibliotece: \n";

    while (wskaznik != NULL) // jezeli wskaznik ksiazek jest rozny od zera wyswietli nasze ksiazki
    {
        wskaznik->pokaz();  // wyswietlenie listy
        wskaznik=wskaznik->nastepny; // wyswietlanie kolejnych elementow
    }
}

bool usun_ksiazke(book **wskaznik, string) // usuniecie wybranej ksiazki
{
    book *pomoc = (*wskaznik), *pomoc1 = NULL;

     if (pomoc == NULL) // jezeli lista jest pusta
     return false;

     else if (pomoc == (*wskaznik)) // w przeciwnym wypadku usuwamy koniec
{
        (*wskaznik) = (*wskaznik)->nastepny;
        delete pomoc;


}
     else // usuwamy element ze srodka lub konca listy
{
         pomoc1->nastepny = pomoc->nastepny;
         delete pomoc;
}
return true;
}


int main()
{
    book *wskaznik=NULL; // *wskaznik jest wskaznikiem na pierwszy element
    int opcja;
    string tytul;

    for(;;) // wywolanie nieskonczonej petli do wyswietlania menu
    {


    // wyswietlanie menu naszej bliblioteki
    cout << "            Biblioteka\n";
    cout << "1) Dodaj Ksiazke.\n";
    cout << "2) Usun Ksiazke.\n";
    cout << "3) Wyswietl Wszystkie Ksiazki.\n";
    cout << "4) Wyjscie.\n";
    cout << "\n";

    cout << "Opcja: "; cin>>opcja;
    // funkcja pozwalajaca wybierac opcje pod ktorymi sa nasze wczesniej stworzone funkcje
    switch (opcja)
    {
    case 1:
        dodaj_ksiazke(&wskaznik);
        break;

    case 2:

        cout << "Podaj tytul ksiazki: ";cin>>tytul;
        if (!usun_ksiazke(&wskaznik, tytul)) // podajemy tytul ksiazki ktora chcemy usunac
            cout << "Nie odnaleziono podanej ksiazki\n";


            else
                cout << "Ksiazka zostala usunieta\n";
        break;

    case 3:
        wyswietl(wskaznik);
        break;

    case 4:
        exit(0);

    default:
        cout << "Wybierz Opcje 1,2,3 lub 4";
        cout << "\n \n";
    }
    }
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 24 lutego 2018 przez Jedras Maniak (54,860 p.)
wybrane 24 lutego 2018 przez zazu623
 
Najlepsza
std::getline
komentarz 24 lutego 2018 przez zazu623 Nowicjusz (150 p.)
w którym miejscu wsadzić?
komentarz 24 lutego 2018 przez Jedras Maniak (54,860 p.)
komentarz 24 lutego 2018 przez zazu623 Nowicjusz (150 p.)
dzięki wielkie :)

Podobne pytania

0 głosów
1 odpowiedź 469 wizyt
pytanie zadane 22 września 2016 w C i C++ przez niezalogowany
0 głosów
4 odpowiedzi 1,345 wizyt
pytanie zadane 8 września 2016 w C i C++ przez Tadeusz Jasińska Nowicjusz (190 p.)
+2 głosów
2 odpowiedzi 175 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...