Konstruktor struktury - przypisanie wartości początkowych

Odpowiedz Nowy wątek
2017-01-11 16:53
0

Cześć, muszę w ponizszym kodzie zadeklarować 3 wartosci poczatkowe(imie, nazwisko, wiek). Dlugo juz nad tym siedze i ciagle nie wiem jak to zrobic, raz program nie dziala, a raz wcale nie wyswietla tych wartosci.

#include<iostream>
#include<conio.h>
#include<string>
#include <cstdlib>
 
using namespace std;
struct Wizytowka // struktura reprezentujaca pojedyncza wizytowke
{
    string imie;
    string nazwisko;
    int wiek;
    Wizytowka *nastepny; // wskaznik na nastepny element na liscie
    Wizytowka *poprzedni;// wskaznik na poprzedni element na liscie
Wizytowka() // konstruktor - wywolywany przy tworzeniu obiektu
    {
        // wczytujemy dane
        cout << "Podaj imie: ";
        cin >> imie;
        cout << "Podaj nazwisko: ";
        cin >> nazwisko;
        cout << "Podaj wiek: ";
        cin >> wiek;
        // wskazniki ustawiamy na NULL
        nastepny = NULL;
    }
                void wypisz()
    {
        cout << "Imie: " << imie << ", Nazwisko: " << nazwisko << ", Wiek: " << wiek << endl;
    }
};
 
void dodaj_wizytowke(Wizytowka **korzen)
{
    Wizytowka *nowa = new Wizytowka; // utworzenie nowej wizytowki
    Wizytowka *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
 
    while (pomoc != NULL && (pomoc->nazwisko).compare(nowa->nazwisko) == -1) // dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem poruszamy sie dalej
    {
        pomoc1 = pomoc; // pomoc1 zawsze wskazuje poprzednika pomoc
        pomoc = pomoc->nastepny;
    }
 
    if (pomoc != NULL && (pomoc->nazwisko).compare(nowa->nazwisko) == 0) // wizytowka z podanym nazwiskiem juz istanieje
    {
        cout << "Wizytowka " << nowa->nazwisko << " juz istanieje w wizytowniku\n";
        delete nowa; // usuniecie obiektu
    }
    else if ((*korzen) == NULL || (pomoc == (*korzen) && (pomoc->nazwisko).compare(nowa->nazwisko) == 1)) // nowy element bedzie korzeniem listy
    {
        nowa->nastepny = (*korzen);
        (*korzen) = nowa;
    }
    else // dodajemy osobe w srodku lub na koncu listy
    {
        pomoc1->nastepny = nowa;
        nowa->nastepny = pomoc;
    }
}
 
void wyszukaj_wizytowke(Wizytowka *korzen, string a)
{
    while (korzen != NULL && (korzen->nazwisko).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
        korzen = korzen->nastepny;
 
    if (korzen == NULL)
        cout << "Nie ma wizytowki " << a << endl;
    else
        korzen->wypisz();
}
 
void wypisz_wizytownik(Wizytowka *korzen)
{
    cout << "Zawartosc wizytownika:\n";
 
    while (korzen != NULL)
    {
        korzen->wypisz(); // wypisanie wizytowki
        korzen = korzen->nastepny; // przejscie na kolejny element
    }
}
 
bool usun_wizytowke(Wizytowka **korzen, string a)
{
    if ((*korzen) == NULL) // lista jest pusta
        return false;
    Wizytowka *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
 
    while (pomoc != NULL && (pomoc->nazwisko).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
    {
        pomoc1 = pomoc;
        pomoc = pomoc->nastepny;
    }
 
    if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
        return false;
    else if (pomoc == (*korzen)) // usuwamy koniec
    {
        (*korzen) = (*korzen)->nastepny;
        delete pomoc;
    }
    else // usuwamy z srodka lub konca listy
    {
        pomoc1->nastepny = pomoc->nastepny;
        delete pomoc;
    }
    return true;
}
 
int main()
{
    char instrukcja;
    string nazwisko;
    Wizytowka *korzen = NULL; // korzen listy - wskaznik na pierwszy element
 
    for (;;) {
        cout << "MENU GLOWNE (wybierz jedna z ponizszych opcji)\n"
            << "1 - Dodaj osobe\n"
            << "2 - Wyszukanie osoby\n"
            << "3 - Wypisz wszystkie osoby\n"
            << "4 - Usuniecie osoby\n"
            << "5 - Koniec programu\n";
 
        instrukcja = getch();
            switch (instrukcja)
            {
            case '1':
                dodaj_wizytowke(&korzen);
                break;
            case '2':
                cout << "Podaj nazwisko: ";
                cin >> nazwisko;
                wyszukaj_wizytowke(korzen, nazwisko);
                break;
            case '3':
                wypisz_wizytownik(korzen);
                break;
            case '4':
                cout << "Podaj nazwisko: ";
                cin >> nazwisko;
                if (!usun_wizytowke(&korzen, nazwisko))
                    cout << "Nie odnaleziono wizytowki z podanym nazwiskiem" << endl;
                else
                    cout << "Wizytowka z podanym nazwiskiem zostala usunieta" << endl;
                break;
            case '5':
                exit(0);
            default:
                cout << "Musisz wybrac jedna z mozliwych opcji!!!";
                break;
            }
            getch();
            system("cls");
 
        }
    return 0;
}
 

Pozostało 580 znaków

2017-01-11 17:15
0
Cześć, muszę w ponizszym kodzie zadeklarować 3 wartosci poczatkowe(imie, nazwisko, wiek). Dlugo juz nad tym siedze i ciagle nie wiem jak to zrobic, raz program nie dziala, a raz wcale nie wyswietla tych wartosci.

Zbyt ogólny opis problemu.
Może chodzi o konstruktor z parametrami?
Dlaczego nikt nie odpowiada w moim wątku?


edytowany 1x, ostatnio: carlosmay, 2017-01-11 17:16

Pozostało 580 znaków

2017-01-11 17:28
0

Problem polega na tym że muszę przypisać na stałe kilka początkowych wartości do pól w strukturze Wizytowka, tak żeby za każdym razem gdy program się uruchomi mial je juz wprowadzone

Pozostało 580 znaków

2017-01-11 17:30
0

Podaj jakiś przykład:

  1. Uruchamiam program.
  2. ...
    ... co jest, a czego oczekujesz?

Pozostało 580 znaków

2017-01-11 17:31
1

Konstruktor nie powinien się bawić w pytanie użytkownika o dane. Konstruktor dostaje te dane jako parametry, ustawia je tam gdzie trzeba i tyle.

Pozostało 580 znaków

2017-01-11 17:32
0

Teraz jest tak uruchamiam program, naciskam przycisk '3' i nie wyswietla nic
Chce żeby było, uruchamiam program, wciskam '3' i wyswietla dowolne imie, nazwisko, wiek.

Pozostało 580 znaków

2017-01-11 17:34
0

Przecież lista jest pusta, przy uruchomieniu programu.
Jeśli masz zamiar korzystać z danych z poprzedniej sesji zapisuj dane przed wyjściem z programu do pliku.


edytowany 1x, ostatnio: carlosmay, 2017-01-11 17:35

Pozostało 580 znaków

2017-01-11 17:36
0

Tak, jest pusta, a chce żeby miała kilka wartości poczatkowych przypisanych w kodzie, a nastepne zeby juz uzytkownik wpisywa,podczas pracy z programem.

edytowany 1x, ostatnio: prz3m3k96, 2017-01-11 17:38

Pozostało 580 znaków

2017-01-11 17:39
0

Ponawiam propozycję o konstruktorze parametrycznym.


Pozostało 580 znaków

2017-01-11 17:44
0

Okej, a mogłbyś podpowiedzieć jak to zrobić?
Próbowałem, ze w main pisałem, ale tak mi nie działało

Wizytowka(){
imie="Pawel";
nazwisko="NowaK";
wiek=13;
 }
edytowany 1x, ostatnio: prz3m3k96, 2017-01-11 17:44
Poczekaj chwilkę. Coś nadrukuję. - carlosmay 2017-01-11 17:55

Pozostało 580 znaków

2017-01-11 18:21
0
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
 
struct card {
    std::string name;
    std::string surname;
    unsigned short age;
    card() = default;
    card(const std::string& nm, const std::string& snm, unsigned short age)
        :name{ nm }, surname{ snm }, age{ age }
    {}
    friend std::ostream& operator<<(std::ostream& os, const card& card)
    {
        return os << card.name << ' ' << card.surname << ", wiek: " << card.age;
    }
};
 
class business_card_case {
    std::vector<card> business_cards;
public:
    business_card_case(const card& new_card = card("Janek", "Kowalski", 25u))
        :business_cards{ new_card }
    {}
    business_card_case(const std::string& nm, const std::string& snm, unsigned short age)
        :business_cards{ card(nm, snm, age) }
    {}
 
    void append_card(const card& new_card)
    {
        business_cards.push_back(new_card);
    }
 
    friend std::ostream& operator<<(std::ostream& os, const business_card_case& bcc)
    {
        for (auto const& el : bcc.business_cards) {
            os << el << '\n';
        }
        return os;
    }
};
 
int main()
{
    business_card_case cards{};
    std::cout << cards << '\n';
    cards.append_card(card("Antek", "Antkowski", 24u));
    cards.append_card(card("Anna", "Nowa", 18u));
    std::cout << cards << '\n';
}

http://melpon.org/wandbox/permlink/RU5KbcXoCBIunHY6


edytowany 1x, ostatnio: carlosmay, 2017-01-11 18:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0