Tekstowe RPG wysypuje się po podaniu nazwy gracza

Tekstowe RPG wysypuje się po podaniu nazwy gracza
syx32
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Witam, pisze tekstową gre na zaliczenie. Niestety na starcie po wpisaniu nazwy gracza gra sie wysypuje. Gdzie zrobiłem błąd?
Nie wydaje mi się, że to błąd fstream (który wyświetla intro gry) tylko bardziej chodzi o vector. ( funkcja void jest wywoływana w case 1 w menu) WELP

Kopiuj
#include <iostream>
#include <fstream>
#include <windows.h>
#include <string>
#include <vector>

using namespace std;




struct Character // postac i jej statystyki
{
	string name;
};
vector <Character> postac;

void charcre(vector <Character> postac)
{
    string name;
	system("cls");
	cout << "o==[]::::::::::::::::> TWORZENIE POSTACI <::::::::::::::::[]==O"  << endl;
  	cout << "---------------------------------------------------------------"  << endl;
  	cout << endl;
  	cout << " IMIE TWOJEJ POSTACI: "; 
	cin >> postac[1].name ;
	getchar();
    
     ifstream plik;
     plik.open("charcre_intro.txt");
     char output[1000];
     if (plik.is_open()) 
	    {
            while (!plik.eof()) 
			{
               plik >> output;
               cout<<output;
             }
        }
}
int main()
{
	vector <Character> postac;
	int wybormenu;
	cout << "o==[]::::::::::::::::> SUPER GRA FANTASY 3 <::::::::::::::::[]==O" << endl;
	cout << "----------------------    MENU GLOWNE      ----------------------" << endl;
	cout << " 1. GRAJ " << endl;
	cout << " 2. WYJDZ " << endl;
	cout << " WYBOR: "; cin >> wybormenu;
	switch(wybormenu)
	{
		case 1: 
		        charcre(postac);
		        getchar();
		        cout << " XXX " << endl;
		        cout << " XXX  " << endl;
		        cout << " XXX " << postac[1].name << endl;
		break;		          
        case 2: 
		        exit(0); 
		break;	
	}
	
	return 0;
}

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0
Kopiuj
cin >> postac[1].name ;

Próbujesz dostać się do drugiej osoby w wektorze postac który jest pusty i nie ma żadnych osób.

Musisz najpierw stworzyć postać (zmienną typu Character) i dodać ją do wektora za pomocą np. push_back.

syx32
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

okej zrobiłem tak jak napisałeś i wszystko gra ale kiedy próbuje później wywołać to imie to program znowu się wysypuje

Kopiuj
Character b;
    b.name;
	
	system("cls");
	cout << "o==[]::::::::::::::::> TWORZENIE POSTACI <::::::::::::::::[]==O"  << endl;
  	cout << "---------------------------------------------------------------"  << endl;
  	cout << endl;
  	cout << " IMIE TWOJEJ POSTACI: "; 
	cin >> b.name ;
	postac.push_back(b);
	getchar();
    system("cls");

fragment gdzie próbuje wywołać imie:

Kopiuj
 charcre(postac);
		        cout << endl;
				cout << "                           JEGO IMIE TO: " << postac[0].name << endl;
				getchar();
		        

co zrobiłem źle?
WELP

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0

U Ciebie wektor jest przekazywany przez wartość (kopię) a więc dodanie elementu do wektora w funkcji doda go to lokalnej kopii.

Musisz przekazać wektor przez referencję:

Kopiuj
void charcre(vector<Character> &postac)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.