Konstruktor struktury - przypisanie wartości początkowych

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;
}

 
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? https://4programmers.net/Pomoc/Forum_dyskusyjne/Dlaczego_nikt_nie_odpowiada_w_moim_w%C4%85tku
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

0

Podaj jakiś przykład:

  1. Uruchamiam program.
  2. ...
    ... co jest, a czego oczekujesz?
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.

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.

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.

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.

0

Ponawiam propozycję o konstruktorze parametrycznym.

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;
 }
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

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