Funkcja nie wywołuje się

0

Cześć mam taki problem ,na zajęcia tworzę prosty program kalendarz w którym podaję dzień,miesiąc i nazwę wydarzenia i potem sobie mogę te wydarzenie wyszukać.
Stworzyłem funkcję którą dodaję wydarzenie oraz funkcję która zamienia miesiąc z numeru na nazwę (np. 1 to styczeń) problem w tym że nie chcę zamienić mi tego numeru na nazwę.
Fragment kodu to:

void months_name_change( Event *new_event, string months_change)
{
	if ( new_event->month == 1 )
	{
		months_change="Styczen";
	}
	else if ( new_event->month == 2 )
	{
		months_change="Luty";
	}
	else if ( new_event->month == 3 )
	{
		months_change="Marzec";
	}
	else if ( new_event->month== 4 )
	{
		months_change="Kwiecien";
	}
	else if ( new_event->month == 5 )
	{
		months_change="Maj";
	}
	else if ( new_event->month == 6 )
	{
		months_change="Czerwiec";
	}
	else if ( new_event->month == 7 )
	{
		months_change="Lipiec";
	}
	else if ( new_event->month == 8 )
	{
		months_change="Sierpien";
	}
	else if ( new_event->month == 9 )
	{
		months_change="Wrzesien";
	}
	else if ( new_event->month == 10 )
	{
		months_change="Pazdziernik";
	}
	else if ( new_event->month == 11 )
	{
		months_change="Listopad";
	}
	else if ( new_event->month == 12 )
	{
		months_change="Grudzien";
	}
}

void print( Event *new_event, string months_change )
{
	cout<<"Nazwa wydarzenia to:"<<new_event->event_name<<endl;

	if ( new_event->day < 10 )
	{
		cout<<"Data 0"<<new_event->day<<"."<<months_change<<endl;
	}
	else
	{
		cout<<"Data "<<new_event->day<<"."<<months_change<<endl;
	}
}
void add( Event *new_event, int n )
{
		string months_change;

		cout<<"Podaj informacje o wydarzeniu: ";
	    cin>>new_event->event_name;

	    cout<<"Podaj numer dnia"<<endl;
	    cin>>new_event->day;

	    cout<<"Podaj numer miesiaca"<<endl;
	    cin>>new_event->month;

		months_name_change( new_event, months_change );

		print( new_event, months_change );
}

Nie chcę mi działać funkcja months_name_change w funkcji add.
z góry dzięki za pomoc.

1

Modyfikujesz tylko string na stosie, a jak funkcja skończy działanie to Twoje zmiany giną. Funkcja month_name_change musi przyjmować wskaźnik do stringa(zmiana wskaźnka, automatycznie modyfikuje miejsce w pamięci przez niego wskazywane - nieistotne gdzie te zmiany sie odbywają, na stosie czy gdzie indziej), a wysyłasz jej adres stringa do zmiany:
void months_name_change( Event *new_event, string * months_change)
A w funkcji add:
months_name_change( new_event, &months_change );

1

Bo operujesz na kopii. Polecam lekturę: Przekazywanie parametru przez wartość i referencję

0

nie lepiej było by ci przechowywać te nazwy miesięcy w jakiejś tablicy, zamiast tworzyć taką serie ifów?

0

Wszystko działa ,dziękuję za pomoc :)

0
void months_name_change( Event *new_event, string & months_change)
{
    static const vector<string> months_names = {
        "Styczen", "Luty", "Marzec", "Kwiecien",
        "Maj", "Czerwiec", "Lipiec", "Sierpien",
        "Wrzesien", "Pazdziernik", "Listopad", "Grudzien"
    };
    months_change = months_names[new_event->month];
}

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