1
resposta

Compilador exibe: floating point exception

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <fstream>
#include <ctime> //semente dos numeros aleatorios
#include <cstdlib> //random
using namespace std;

char chute;
string palavra_secreta;
map <char, bool> mapa;
vector <char> chutes_errados;

//mapenado os erros:
//criar uma sequencias de caracteres que ja foram chutados e nao estao na palavra_secreta
        //vetor dinâmico (cria vetor sem determinar o tamanho)

vector<string> le_arquivo(){
    //input file stream - ifsream (le um fluxo no arquivo)
    ifstream arquivo;
    arquivo.open("frutas.txt");

    int quantidade_de_palavras;
    arquivo >> quantidade_de_palavras;

    vector <string> palavras_do_arquivo;

    for(int i=0; i < quantidade_de_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];

}

bool letra_existe (char chute){
    for (char letra : palavra_secreta){
        if (chute == letra){
            return true;
        }
    }
    return false;
}

bool nao_ganhou (){
    for (char letra : palavra_secreta){
        if (!mapa [letra]){
            return true;
        }
    }
    return false;
}

bool nao_enforcou (){
    return chutes_errados.size () < 5;
}

void imprime_erros (){
    cout << "Chutes errados: ";  

        for (char letra : chutes_errados){
            cout << letra << " "; //imprime chutes errados
        }

        cout << endl;
}

void imprime_palavra (){
    for (char letra : palavra_secreta){
        if (mapa [letra]){
            cout << letra << " ";
        }else {
            cout << "_ " ;
        }
    }
}

void lendo_chute (){
    cout << endl;
    cout << endl;
    cout << "Digite uma letra." << endl;
    cout << endl;
    cin >> chute;
    mapa [chute] = true;
}

void testa_chute(){
    if (letra_existe(chute)){
        cout << "Você acertou." << endl;
    }else {
        cout << "Você errou a letra." << endl;
        chutes_errados.push_back(chute);
    }
    cout << endl;
}

void imprime_resultado (){
    cout << "FIM DE JOGO" << endl;

    if (nao_ganhou() == false){
        cout << "Você ganhou. A palavra secreta era " << palavra_secreta << endl;
    }else if (!nao_enforcou()){
        cout << "Você perdeu. A palavra secreta era " << palavra_secreta << endl;
    }
}

int main (){

    cout << "***Jogo da forca***" << endl;
    cout << endl;

    le_arquivo();
    sorteia_palavra();


    while (nao_ganhou () && nao_enforcou()){
        imprime_erros();
        imprime_palavra();
        lendo_chute();
        testa_chute();
    }

    imprime_resultado();
}
1 resposta

Olá, Isadora! Tudo bem?

Desculpe pela demora em obter retorno.

Aparentemente, o erro está ocorrendo na função sorteia_palavra(). A exceção "floating point exception" acontece quando ocorre uma operação matemática inválida, como uma divisão por zero. Para resolver esse problema, sugiro que você verifique se o arquivo "frutas.txt" está sendo lido corretamente e se a variável palavras_do_arquivo está sendo preenchida corretamente com as palavras do arquivo.

Você pode adicionar alguns cout para verificar se o arquivo está sendo lido corretamente e se o vetor palavras_do_arquivo está sendo preenchido corretamente. Por exemplo:

vector<string> le_arquivo(){
    ifstream arquivo;
    arquivo.open("frutas.txt");

    int quantidade_de_palavras;
    arquivo >> quantidade_de_palavras;

    cout << "Quantidade de palavras: " << quantidade_de_palavras << endl;

    vector <string> palavras_do_arquivo;

    for(int i=0; i < quantidade_de_palavras;i++){
        string palavra_lida;
        arquivo >> palavra_lida;
        cout << "Palavra lida: " << palavra_lida << endl;
        palavras_do_arquivo.push_back(palavra_lida);
    }
    return palavras_do_arquivo;
}

Dessa forma, você poderá verificar se o arquivo está sendo lido corretamente e se as palavras estão sendo adicionadas ao vetor palavras_do_arquivo. Certifique-se de que o arquivo "frutas.txt" esteja no mesmo diretório do seu programa, já que o código parece estar ok.

Espero que isso ajude a resolver o problema! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!