O meu código está rodando o cabeçalho, mas não consegue imprimir o restante da aplicação, pois dá um erro:
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
Como eu posso consertar isso? Obs: o arquivo palavras está idêntico ao utilizado pelo professor
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
string palavra_secreta = "MELANCIA";
map<char, bool> chutou;
vector<char> chutes_errados;
bool letra_existe(char chute)
{
for (char letra : palavra_secreta)
{
if (chute == letra)
{
return true;
}
}
return false;
}
bool nao_acertou()
{
for (char letra : palavra_secreta)
{
if (!chutou[letra])
{
return true;
}
}
return false;
}
bool nao_enforcou()
{
return chutes_errados.size() < 5;
}
void imprime_cabecalho()
{
cout << "*********************" << endl;
cout << "*** Jogo da Forca ***" << endl;
cout << "*********************" << endl;
cout << endl;
}
void imprime_erros()
{
cout << "Chutes errados: ";
for (char letra : chutes_errados)
{
cout << letra << " ";
}
cout << endl;
}
void imprime_palavra_secreta()
{
for (char letra : palavra_secreta)
{
if (chutou[letra])
{
cout << letra << " ";
}
else
{
cout << "_ ";
}
}
cout << endl;
}
void tratando_chute()
{
cout << "Informe o seu chute: " << endl;
char chute;
cin >> chute;
chutou[chute] = true;
if (letra_existe(chute))
{
cout << "Você acertou, essa letra está na palavra!" << endl;
}
else
{
cout << "Você errou, essa letra não existe na palavra!" << endl;
chutes_errados.push_back(chute);
}
cout << endl;
}
vector<string> le_arquivo()
{
ifstream arquivo;
arquivo.open("palavras.txt");
int quantidade_palavras;
arquivo >> quantidade_palavras;
vector<string> palavras_do_arquivo;
for (int i = 0; i < quantidade_palavras; i++)
{
string palavra_lida;
arquivo >> palavra_lida;
palavras_do_arquivo.push_back(palavra_lida);
}
return palavras_do_arquivo;
}
void sorteia_palavra()
{
vector<string> palavras = le_arquivo();
srand(time(NULL));
int indice_sorteado = rand() % palavras.size();
palavra_secreta = palavras[indice_sorteado];
}
int main()
{
imprime_cabecalho();
le_arquivo();
sorteia_palavra();
while (nao_acertou() && nao_enforcou())
{
imprime_erros();
imprime_palavra_secreta();
tratando_chute();
}
cout << "A palavra secreta era " << palavra_secreta << endl;
cout << "Fim de jogo" << endl;
if (nao_acertou())
{
cout << "Você perdeu, tente novamente!" << endl;
}
else
{
cout << "Parabéns, você acertou a palavra secreta!" << endl;
}
}