Czesc,
Ja do problemu podejde troszke inaczej. Wypisze Ci co uwazam w tym kodzie za zle tak bys mogl sie poprawic na przyszlosc, post moze byc troszke przydlugawy
1. Piszesz w C++ to nie mieszaj go w C. To sa dwa rozne jezyki (mimo ze C++ wspiera C). Wiec wszystkie include ktore robisz (oprocz conio.h bo nie jest w standardzie) powinienes napisac cstdio zamiast stdio.h
2. Nie powinienes uzywac funkcji gets. Jest ona niewsperana od C++11 (a juz niedlugo standard C++17 wyjdzie). Zgodnie z dokumentacja
"The most recent revision of the C standard (2011) has definitively removed this function from its specification.
The function is deprecated in C++ (as of 2011 standard, which follows C99+TC3)."
3. Nie ma sensu uzywac char, jest on praktycznie nieuzywany w C++. Od tego mamy string. Jezeli chcesz sie uczyc manipulacji na lancuchach znakowych, to ok mozna jako cwiczenie. Ale zeby uczyc sie zeby znac to nie jest przydatne.
4. Uzywanie golego new i delete to jest antyidom od C++11 (powinno sie uzywac shared_ptr, unique_ptr)
5. Nie ma sensu wklejac zakomentowanego kodu. Jezeli potrzebujesz trzymac poprzednie wersje kodu zainteresuj sie kontrola wersji (github / bitbucket)
6. endl nie sluzy do nowej lini. do tego sluzy "\n". To ze wstawia nowa linie, to nie znaczy ze powinno sie go wszedzie uzywac.
7. Zamiast gets mozesz uzyc cin.getline()
a odnosnie bledu, na pierwrzy rzut oka wszystko wyglada ok, najlepiej bedziesz jak uzyjesz debuggera i zobaczysz czemu nie ma pierwszego znaku